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.
return fill_template(parse_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));
}
return parse_template(file_get_contents($filename));
}
# A template is a hash with a name string, a pieces array, and possibly
# an args array.
# 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);
$tem =& tem_push();
$tem['pieces'] = array();
$matches = preg_split('/(<!--)?(~[^~]*~)(?(1)-->)/', preg_replace('/<!--(~[^~]*~)-->/', '$1', $string), -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
if(array_key_exists(0, $value)) return $value;
# key/value pairs -- expand sub-template once.
else return array($value);
if(array_key_exists(0, $value)) return $value;
# key/value pairs -- expand sub-template once.
else return array($value);
+ } elseif($value || $value === 0 || $value === '0' || $value === '') {
# value -- expand sub-template once using only parent values
return array(array());
} else {
# value -- expand sub-template once using only parent values
return array(array());
} else {
return $value = true; # show once
}
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) {
function tem_auto_show(&$value) {
- if($value !== false) $value = array(array());
+ if($value === null) $value = array(array());
}
function load_str($str) {
}
function load_str($str) {
- $this->template = parse_template($str);
+ $this->template =& parse_template($str);
}
function load($filename) {
}
function load($filename) {
- $this->template = parse_template_file($filename);
+ $this->template =& parse_template_file($filename);
}
function run($tem = false) {
}
function run($tem = false) {