Skip to content

Commit

Permalink
- bugfix {strip} must keep space between hmtl tags. Broken by changes…
Browse files Browse the repository at this point in the history
… of 10.2.2016 #184

  - new feature/bugfix {foreach}{section} new attribute 'property' to force compilation of loop property
    read NEW_FEATURES.txt #189
  • Loading branch information
uwetews committed Feb 20, 2016
1 parent a884855 commit 4958dea
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 4 deletions.
22 changes: 22 additions & 0 deletions NEW_FEATURES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,28 @@ This file contains a brief description of new features which have been added to

Smarty 3.1.30

Loop optimization {foreach} and {section}
=========================================
Smarty does optimize the {foreach} and {section} loops by removing code for not needed loop
properties.
The compiler collects needed properties by scanning the current template for $item@property,
$smarty.foreach.name.property and $smarty.section.name.property.
The compiler does not know if additional properties will be needed outside the current template scope.
Additional properties can be generated by adding them with the property attribute.

Example:
index.tpl
{foreach $from as $item properties=[iteration, index]}
{include 'sub.tpl'}
{$item.total}
{/foreach}

sub.tpl
{$item.index} {$item.iteration} {$item.total}

In above example code for the 'total' property is automatically generated as $item.total is used in
index.tpl. Code for 'iteration' and 'index' must be added with properties=[iteration, index].

New tag {make_nocache}
======================
Syntax: {make_nocache $foo}
Expand Down
4 changes: 3 additions & 1 deletion change_log.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
 ===== 3.1.30-dev ===== (xx.xx.xx)
20.02.2016
- bugfix {strip} must keep space between hmtl tags. Broken by changes of 10.2.2016 https://github.com/smarty-php/smarty/issues/184

- new feature/bugfix {foreach}{section} new attribute 'property' to force compilation of loop property
read NEW_FEATURES.txt https://github.com/smarty-php/smarty/issues/189

19.02.2016
- revert output buffer flushing on display, echo content again because possible problems when PHP files had
characters (newline} after ?> at file end https://github.com/smarty-php/smarty/issues/187
Expand Down
2 changes: 1 addition & 1 deletion libs/Smarty.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ class Smarty extends Smarty_Internal_TemplateBase
/**
* smarty version
*/
const SMARTY_VERSION = '3.1.30-dev/46';
const SMARTY_VERSION = '3.1.30-dev/47';

/**
* define variable scopes
Expand Down
20 changes: 19 additions & 1 deletion libs/sysplugins/smarty_internal_compile_foreach.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
* @var array
* @see Smarty_Internal_CompileBase
*/
public $optional_attributes = array('name', 'key');
public $optional_attributes = array('name', 'key', 'properties');

/**
* Attribute definition: Overwrites base class.
Expand Down Expand Up @@ -137,6 +137,24 @@ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler, $
if (!empty($this->matchResults[ 'named' ])) {
$namedAttr = $this->matchResults[ 'named' ];
}
if (isset($_attr[ 'properties' ]) && preg_match_all("/['](.*?)[']/", $_attr[ 'properties' ], $match)) {
foreach ($match[ 1 ] as $prop) {
if (in_array($prop, $this->itemProperties)) {
$itemAttr[ $prop ] = true;
} else {
$compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
}
}
if ($this->isNamed) {
foreach ($match[ 1 ] as $prop) {
if (in_array($prop, $this->nameProperties)) {
$nameAttr[ $prop ] = true;
} else {
$compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
}
}
}
}
if (isset($itemAttr[ 'first' ])) {
$itemAttr[ 'index' ] = true;
}
Expand Down
11 changes: 10 additions & 1 deletion libs/sysplugins/smarty_internal_compile_section.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class Smarty_Internal_Compile_Section extends Smarty_Internal_Compile_Private_Fo
* @var array
* @see Smarty_Internal_CompileBase
*/
public $optional_attributes = array('start', 'step', 'max', 'show');
public $optional_attributes = array('start', 'step', 'max', 'show', 'properties');

/**
* counter
Expand Down Expand Up @@ -119,6 +119,15 @@ public function compile($args, Smarty_Internal_TemplateCompilerBase $compiler)
if (!empty($this->matchResults[ 'named' ])) {
$namedAttr = $this->matchResults[ 'named' ];
}
if (isset($_attr[ 'properties' ]) && preg_match_all("/['](.*?)[']/", $_attr[ 'properties' ], $match)) {
foreach ($match[ 1 ] as $prop) {
if (in_array($prop, $this->nameProperties)) {
$namedAttr[ $prop ] = true;
} else {
$compiler->trigger_template_error("Invalid property '{$prop}'", null, true);
}
}
}
$namedAttr[ 'index' ] = true;
$output = "<?php\n";
foreach ($_attr as $attr_name => $attr_value) {
Expand Down

0 comments on commit 4958dea

Please sign in to comment.