From b7c9af20b23274f85f87f76c4a9a2debf5f207a9 Mon Sep 17 00:00:00 2001 From: andrey Date: Fri, 26 Jan 2001 15:15:55 +0000 Subject: [PATCH] Added ability to index by key. --- Smarty.class.php | 12 ++++++++---- demo/index.php | 7 ++----- demo/templates/index.tpl | 11 +++++------ index.php | 7 ++----- libs/Smarty.class.php | 12 ++++++++---- templates/index.tpl | 11 +++++------ 6 files changed, 30 insertions(+), 30 deletions(-) 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}