diff --git a/Smarty.class.php b/Smarty.class.php
index 7b242694..e2d80a00 100644
--- a/Smarty.class.php
+++ b/Smarty.class.php
@@ -392,7 +392,7 @@ class Smarty
/* If the tag name matches a variable or section property definition,
we simply process it. */
- if (preg_match('!^\$(\w+/)*\w+(?>\|@?\w+(:[^|]+)?)*$!', $tag_command) || // if a variable
+ if (preg_match('!^\$(\w+/)*\w+(?>\.\w+)*(?>\|@?\w+(:[^|]+)?)*$!', $tag_command) || // if a variable
preg_match('!^#(\w+)#(?>\|@?\w+(:[^|]+)?)*$!', $tag_command) || // or a configuration variable
preg_match('!^%\w+\.\w+%(?>\|@?\w+(:[^|]+)?)*$!', $tag_command)) { // or a section property
settype($tag_command, 'array');
@@ -854,11 +854,11 @@ class Smarty
allow people to use older versions of PHP we emulate preg_grep() and
use the version check to see what function to call. */
if (strnatcmp($PHP_VERSION, '4.0.4') >= 0) {
- $var_exprs = preg_grep('!^\$(\w+/)*\w+(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
+ $var_exprs = preg_grep('!^\$(\w+/)*\w+(?>\.\w+)*(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$conf_var_exprs = preg_grep('!^#(\w+)#(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$sect_prop_exprs = preg_grep('!^%\w+\.\w+%(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
} else {
- $var_exprs = $this->_preg_grep('!^\$(\w+/)*\w+(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
+ $var_exprs = $this->_preg_grep('!^\$(\w+/)*\w+(?>\.\w+)*(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$conf_var_exprs = $this->_preg_grep('!^#(\w+)#(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$sect_prop_exprs = $this->_preg_grep('!^%\w+\.\w+%(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
}
@@ -887,13 +887,17 @@ class Smarty
$modifiers = explode('|', substr($var_expr, 1));
$sections = explode('/', array_shift($modifiers));
- $var_name = array_pop($sections);
+ $props = explode('.', array_pop($sections));
+ $var_name = array_shift($props);
$output = "\$$var_name";
foreach ($sections as $section) {
$output .= "[\$_sections['$section']['properties']['index']]";
}
+ foreach ($props as $prop) {
+ $output .= "['$prop']";
+ }
$this->_parse_modifiers($output, $modifiers);
diff --git a/demo/index.php b/demo/index.php
index 40a1d996..b51d010f 100644
--- a/demo/index.php
+++ b/demo/index.php
@@ -10,11 +10,8 @@ $smarty->assign("LastName",array("Doe","Smith","Johnson","Case"));
$smarty->assign("Class",array(array("A","B","C","D"), array("E", "F", "G", "H"),
array("I", "J", "K", "L"), array("M", "N", "O", "P")));
-$smarty->assign("Contacts",array(
- "phone" => "555-4444",
- "fax" => "555-3333",
- "cell" => "760-1234"
- ));
+$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
+ array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
$smarty->display("./templates/index.tpl");
diff --git a/demo/templates/index.tpl b/demo/templates/index.tpl
index fd96674e..595c9990 100644
--- a/demo/templates/index.tpl
+++ b/demo/templates/index.tpl
@@ -25,13 +25,12 @@ My interests are:
none
{/section}
-Contacts: {$Contacts}
testing
-{$Contacts["phone"]["cell"]}
-{$Contacts["phone"]["fax"]}
-{$Contacts["phone"]["home"]}
-{$Contacts["phone"]["work"]}
-{$Contacts["fax"]}
+{section name=sec1 loop=$contacts}
+ phone: {$sec1/contacts.phone}
+ fax: {$sec1/contacts.fax}
+ cell: {$sec1/contacts.cell}
+{/section}
diff --git a/index.php b/index.php
index 40a1d996..b51d010f 100644
--- a/index.php
+++ b/index.php
@@ -10,11 +10,8 @@ $smarty->assign("LastName",array("Doe","Smith","Johnson","Case"));
$smarty->assign("Class",array(array("A","B","C","D"), array("E", "F", "G", "H"),
array("I", "J", "K", "L"), array("M", "N", "O", "P")));
-$smarty->assign("Contacts",array(
- "phone" => "555-4444",
- "fax" => "555-3333",
- "cell" => "760-1234"
- ));
+$smarty->assign("contacts", array(array("phone" => "1", "fax" => "2", "cell" => "3"),
+ array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
$smarty->display("./templates/index.tpl");
diff --git a/libs/Smarty.class.php b/libs/Smarty.class.php
index 7b242694..e2d80a00 100644
--- a/libs/Smarty.class.php
+++ b/libs/Smarty.class.php
@@ -392,7 +392,7 @@ class Smarty
/* If the tag name matches a variable or section property definition,
we simply process it. */
- if (preg_match('!^\$(\w+/)*\w+(?>\|@?\w+(:[^|]+)?)*$!', $tag_command) || // if a variable
+ if (preg_match('!^\$(\w+/)*\w+(?>\.\w+)*(?>\|@?\w+(:[^|]+)?)*$!', $tag_command) || // if a variable
preg_match('!^#(\w+)#(?>\|@?\w+(:[^|]+)?)*$!', $tag_command) || // or a configuration variable
preg_match('!^%\w+\.\w+%(?>\|@?\w+(:[^|]+)?)*$!', $tag_command)) { // or a section property
settype($tag_command, 'array');
@@ -854,11 +854,11 @@ class Smarty
allow people to use older versions of PHP we emulate preg_grep() and
use the version check to see what function to call. */
if (strnatcmp($PHP_VERSION, '4.0.4') >= 0) {
- $var_exprs = preg_grep('!^\$(\w+/)*\w+(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
+ $var_exprs = preg_grep('!^\$(\w+/)*\w+(?>\.\w+)*(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$conf_var_exprs = preg_grep('!^#(\w+)#(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$sect_prop_exprs = preg_grep('!^%\w+\.\w+%(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
} else {
- $var_exprs = $this->_preg_grep('!^\$(\w+/)*\w+(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
+ $var_exprs = $this->_preg_grep('!^\$(\w+/)*\w+(?>\.\w+)*(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$conf_var_exprs = $this->_preg_grep('!^#(\w+)#(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
$sect_prop_exprs = $this->_preg_grep('!^%\w+\.\w+%(?>\|@?\w+(:[^|]+)?)*$!', $tokens);
}
@@ -887,13 +887,17 @@ class Smarty
$modifiers = explode('|', substr($var_expr, 1));
$sections = explode('/', array_shift($modifiers));
- $var_name = array_pop($sections);
+ $props = explode('.', array_pop($sections));
+ $var_name = array_shift($props);
$output = "\$$var_name";
foreach ($sections as $section) {
$output .= "[\$_sections['$section']['properties']['index']]";
}
+ foreach ($props as $prop) {
+ $output .= "['$prop']";
+ }
$this->_parse_modifiers($output, $modifiers);
diff --git a/templates/index.tpl b/templates/index.tpl
index fd96674e..595c9990 100644
--- a/templates/index.tpl
+++ b/templates/index.tpl
@@ -25,13 +25,12 @@ My interests are:
none
{/section}
-Contacts: {$Contacts}
testing
-{$Contacts["phone"]["cell"]}
-{$Contacts["phone"]["fax"]}
-{$Contacts["phone"]["home"]}
-{$Contacts["phone"]["work"]}
-{$Contacts["fax"]}
+{section name=sec1 loop=$contacts}
+ phone: {$sec1/contacts.phone}
+ fax: {$sec1/contacts.fax}
+ cell: {$sec1/contacts.cell}
+{/section}