From 144fb330586b20e38f99f1bd758fde6de8c96eca Mon Sep 17 00:00:00 2001 From: Jason Woofenden Date: Fri, 6 Nov 2009 12:01:55 -0500 Subject: [PATCH] sections are shown if value is set, more &refs Previously, when deciding if a template section should be expanded/shown, this logic was used: if($value). This does not always behave as expected. For example if you set the value to the string "0" it will not be displayed. With the new code, any string (including "") or integer (including 0) will cause the template section to be displayed. To hide the section, set the value to null or false (or unset it). The commit after this one adds a template section argument "nonempty" which will cause that template section not to be shown if the value is the empty string. --- template.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/template.php b/template.php index 3845c7c..9a512a6 100644 --- a/template.php +++ b/template.php @@ -53,7 +53,7 @@ function template_file($filename, $data) { return fill_template(parse_template_file($filename), $data); } -function parse_template_file($filename) { +function &parse_template_file($filename) { return parse_template(file_get_contents($filename)); } @@ -61,7 +61,7 @@ function parse_template_file($filename) { # A template is a hash with a name string, a pieces array, and possibly # an args array. -function parse_template($string) { +function &parse_template($string) { $tem =& tem_push(); $tem['pieces'] = array(); $matches = preg_split('/()/', preg_replace('//', '$1', $string), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); @@ -163,7 +163,7 @@ function tem_data_as_rows($value) { if(array_key_exists(0, $value)) return $value; # key/value pairs -- expand sub-template once. else return array($value); - } elseif($value) { + } elseif($value || $value === 0 || $value === '0' || $value === '') { # value -- expand sub-template once using only parent values return array(array()); } else { @@ -317,11 +317,11 @@ function tem_auto_first(&$value, $key, $context) { return $value = true; # show once } -# 'show' sections will be shown unless the corresponding data value -# is false (only false, not 0 or '' or array()). +# 'show' sections will be shown unless the corresponding data +# value === false function tem_auto_show(&$value) { - if($value !== false) $value = array(array()); + if($value === null) $value = array(array()); return $value; } @@ -424,11 +424,11 @@ class tem { } function load_str($str) { - $this->template = parse_template($str); + $this->template =& parse_template($str); } function load($filename) { - $this->template = parse_template_file($filename); + $this->template =& parse_template_file($filename); } function run($tem = false) { -- 1.7.10.4