JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
sections are shown if value is set, more &refs
authorJason Woofenden <jason@jasonwoof.com>
Fri, 6 Nov 2009 17:01:55 +0000 (12:01 -0500)
committerJason Woofenden <jason@jasonwoof.com>
Fri, 20 Nov 2009 06:25:42 +0000 (01:25 -0500)
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

index 3845c7c..9a512a6 100644 (file)
@@ -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('/(<!--)?(~[^~]*~)(?(1)-->)/', 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) {