X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=template.php;h=5b03754f5febfdee62db00aad6c19d09a6b24e59;hb=0848aa3606b38ec51701960b9cbd84bea0fbd8ce;hp=28b4814013a7b65b1c6232b80815b035ebb994a9;hpb=4aaf7daac479c97869e5e1ab9b8afc796043fb91;p=wfpl.git diff --git a/template.php b/template.php index 28b4814..5b03754 100644 --- a/template.php +++ b/template.php @@ -57,6 +57,16 @@ class tem { $this->keyval[$key] = $value; } + # like set() but appends + function append($key, $value) { + $this->keyval[$key] .= $value; + } + + # like set() but prepends + function prepend($key, $value) { + $this->keyval[$key] = $value . $this->keyval[$key]; + } + # clear a value. Functionally equivalent to set($key, '') but cleaner and more efficient function clear($key) { unset($this->keyval[$key]); @@ -67,10 +77,15 @@ class tem { return $this->keyval[$key]; } + # depricated (renamed show()) + function sub($sub_template_name) { + $this->show($sub_template_name); + } + # run the template engine on one of the sub-templates and append the result # to the keyval in the main array. See tem_test.php for an example of how # this can be used. - function sub($sub_template_name) { + function show($sub_template_name) { $this->keyval[$sub_template_name] .= template_run($this->sub_templates[$sub_template_name], $this->keyval); # after running a sub-template, clear its sub-templates @@ -81,6 +96,13 @@ class tem { } } + function show_separated($sub_template_name) { + if($this->get($sub_template_name)) { + $this->show($sub_template_name . '_sep'); + } + $this->show($sub_template_name); + } + # this is used by tem::load() and should be otherwise useless function _load(&$in, &$out, &$parents, &$parent) { while($in) { @@ -177,19 +199,27 @@ class tem { print($this->run($templ)); } + # return the names of the top level subs, or an empty array + function top_sub_names() { + if(isset($this->sub_subs['top_level_subs'])) { + return $this->sub_subs['top_level_subs']; + } else { + return array(); + } + } + # return the contents of the top-level sub-templates # - # this does not run the sub-templates, so if you've not called tem_sub() on them, they will be blank. + # this does not run the sub-templates, so if you've not called tem_show() on them, they will be blank. # # Return a hash. # keys: name of top level sub-template. # values: contents of said sub-template. function top_subs() { $ret = array(); - if(isset($this->sub_subs['top_level_subs'])) { - foreach($this->sub_subs['top_level_subs'] as $name) { - $ret[$name] = $this->get($name); - } + $names = $this->top_sub_names(); + foreach($names as $name) { + $ret[$name] = $this->get($name); } return $ret; } @@ -205,6 +235,16 @@ function tem_init() { } } +function tem_append($key, $value) { + tem_init(); + $GLOBALS['wfpl_template']->append($key, $value); +} + +function tem_prepend($key, $value) { + tem_init(); + $GLOBALS['wfpl_template']->prepend($key, $value); +} + function tem_set($key, $value) { tem_init(); $GLOBALS['wfpl_template']->set($key, $value); @@ -220,11 +260,22 @@ function tem_run($templ = false) { return $GLOBALS['wfpl_template']->run($templ); } +# depricated (renamed tem_show()) function tem_sub($sub_template_name) { + tem_show($sub_template_name); +} + +function tem_show($sub_template_name) { tem_init(); - $GLOBALS['wfpl_template']->sub($sub_template_name); + $GLOBALS['wfpl_template']->show($sub_template_name); } +function tem_show_separated($sub_template_name) { + tem_init(); + $GLOBALS['wfpl_template']->show_separated($sub_template_name); +} + + function tem_load($filename) { tem_init(); $GLOBALS['wfpl_template']->load($filename); @@ -239,14 +290,15 @@ function tem_output($filename = false) { # this is used in template_run() and should be of no other use function template_filler($matches) { - list($tag, $enc) = explode('.', $matches[1], 2); + $match = array_pop($matches); + list($tag, $enc) = explode('.', $match, 2); $value = $GLOBALS['wfpl_template_keyval'][$tag]; if($enc) { $encs = explode('.', $enc); foreach($encs as $enc) { $enc = "enc_$enc"; if(function_exists($enc)) { - $value = $enc($value); + $value = $enc($value, $tag); } else { print "ERROR: encoder function '$enc' not found.
\n"; exit(1); @@ -261,7 +313,12 @@ function template_filler($matches) { # returns the result. function template_run($template, &$keyval) { $GLOBALS['wfpl_template_keyval'] =& $keyval; - return preg_replace_callback(array('||', '|~([^~]*)~|', '|([^<]*)|', '|

([^<]*)

|'), 'template_filler', $template); + return preg_replace_callback('`|~([^~]*)~|([^<]*)|

([^<]*)

`', 'template_filler', $template); +} + +function tem_top_sub_names() { + tem_init(); + return $GLOBALS['wfpl_template']->top_sub_names(); } function tem_top_subs() { @@ -269,4 +326,12 @@ function tem_top_subs() { return $GLOBALS['wfpl_template']->top_subs(); } +# replaces currently set template, and returns the old. +function tem_load_new($file) { + $old = $GLOBALS['wfpl_template']; + $GLOBALS['wfpl_template'] = new tem(); + $GLOBALS['wfpl_template']->load($file); + return $old; +} + ?>