X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=template.php;h=697761e2962233e0f080332ceab7366744d3ee6d;hb=924eedbb0b24079e21d6b80005c4330d6f1c8c0f;hp=3845c7c9bf9ec61b1b28829bfc30f4053f2d7035;hpb=e99321a886b30fc6d601c7065384bfe2a6d34bc4;p=wfpl.git diff --git a/template.php b/template.php index 3845c7c..697761e 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 { @@ -300,34 +300,56 @@ function merge_templates(&$main, &$tem) { function tem_auto_sep(&$value, $key, $context) { $rows =& $context['parent']['parent']; if($rows['cur'] != count($rows['rows'])-1) # last row? - return $value = true; # show once + return true; # show once } # auto-show once, only when this is the first row of the parent function tem_auto_last(&$value, $key, $context) { $rows =& $context['parent']['parent']; if($rows['cur'] == count($rows['rows'])-1) # last row? - return $value = true; # show once + return true; # show once } # auto-show once, only when this is the last row of the parent function tem_auto_first(&$value, $key, $context) { $rows =& $context['parent']['parent']; if($rows['cur'] == 0) # first row? - return $value = true; # show once + return 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) return true; + return $value; +} + +# 'empty' sections will be shown only if the corresponding data value is the +# empty string +function tem_auto_empty(&$value) { + if($value === '') return true; + return null; +} + +# 'nonempty' sections will not be shown if the corresponding data +# value is the empty string +function tem_auto_nonempty(&$value) { + if($value === '') return null; return $value; } +# 'unset' sections will not be shown if the corresponding data +# value is not set (opposite of default) +function tem_auto_unset(&$value) { + if($value === null) { + return ''; + } else { + return null; + } +} + # 'evenodd' sections are given an 'evenodd' attribute whose value # alternates between 'even' and 'odd'. - function tem_auto_evenodd(&$values) { $even = true; if($values) foreach($values as &$value) { @@ -337,6 +359,27 @@ function tem_auto_evenodd(&$values) { return $values; } +# 'once' sections are shown exactly once if the value is set (and not at all +# otherwise.) This is useful when an array value would otherwise cause the +# section to be displayed multiple times. +function tem_auto_once(&$value) { + if($value === null) return null; + return true; +} + +function tem_auto_once_if(&$value) { + if($value) return true; + return null; +} + +# 'once' sections are shown exactly once if php evaluates the value to false +# (and not at all otherwise.) This is useful when an array value would +# otherwise cause the section to be displayed multiple times. +function tem_auto_once_else(&$value) { + if($value) return null; + return true;; +} + @@ -389,10 +432,16 @@ class tem { $this->data = array(); } - function set($key, $value) { + function set($key, $value = true) { $this->data[$key] = $value; } + function sets($hash) { + foreach($hash as $key => $value) { + $this->set($key, $value); + } + } + function append($key, $value) { $this->data[$key] .= $value; } @@ -424,11 +473,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) { @@ -502,11 +551,16 @@ function tem_prepend($key, $value) { $GLOBALS['wfpl_template']->prepend($key, $value); } -function tem_set($key, $value) { +function tem_set($key, $value = true) { tem_init(); $GLOBALS['wfpl_template']->set($key, $value); } +function tem_sets($hash) { + tem_init(); + $GLOBALS['wfpl_template']->sets($hash); +} + function tem_get($key) { tem_init(); return $GLOBALS['wfpl_template']->get($key);