X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=template.php;h=fc7302b2ec81edb5ea6ff159f64e9e119cb7c1ac;hb=7a16207b28e113674dfc56846c2971086b34cd0e;hp=56435021891b9c745375c4183fbe6141ac6bd2bc;hpb=5d04ed2e47615f332c32d11659400b12c59acf21;p=wfpl.git diff --git a/template.php b/template.php index 5643502..fc7302b 100644 --- a/template.php +++ b/template.php @@ -157,12 +157,14 @@ function &tem_push(&$stack = NULL) { # The middle form will be converted to the last form as we use it. -function tem_data_as_rows($value) { +function tem_data_as_rows($value, $key) { if(is_array($value)) { - # numeric keys, is already array of arrays -- expand sub-template for each. - if(array_key_exists(0, $value)) return $value; + # numeric keys + if(array_key_exists(0, $value)) { + if(is_array($value[0])) return $value; # already array of hashes. + else return columnize($value, $key); # key/value pairs -- expand sub-template once. - else return array($value); + } else return array($value); } elseif($value || $value === 0 || $value === '0' || $value === '') { # value -- expand sub-template once using only parent values return array(array()); @@ -210,10 +212,10 @@ function &tem_row_data($tem, $context) function_exists($auto_func) or die("ERROR: template auto function '$auto_func' not found.
\n"); } - if($auto_func) $value = $auto_func($scope['data'][$key], $key, $scope); + if($auto_func) $value = $auto_func($scope['data'][$key], $key, $scope, $tem['args']); else $value = $scope['data'][$key]; - $rows = tem_data_as_rows($value); + $rows = tem_data_as_rows($value, $key); if(is_array($value)) $scope['data'][$key] = $rows; return $rows; @@ -300,46 +302,52 @@ 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 === false function tem_auto_show(&$value) { - if($value === null) $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 === '') $value = null; + if($value === '') return null; return $value; } -# 'not' sections will not be shown if the corresponding data +# '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) { - $value = ''; + return ''; } else { - $value = null; + return null; } - return $value; } # 'evenodd' sections are given an 'evenodd' attribute whose value @@ -353,6 +361,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;; +} +