X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=template.php;h=1c775131981ef81b2e1593e31cbd0a95d20c11c4;hb=608ecf965408645758cdca1e5f01ff5ac3eff166;hp=80201e083bdf47089e3801840896564b0e489163;hpb=6126e566b80bd1eb4dd3212481fa4b854bdc3549;p=wfpl.git diff --git a/template.php b/template.php index 80201e0..1c77513 100644 --- a/template.php +++ b/template.php @@ -1,23 +1,5 @@ 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 +59,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 +78,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) { @@ -130,40 +134,46 @@ class tem { } #repeat } + # like load() except you pass a string instead of a filename + function load_str($str) { + $this->template = ''; + $parents = array('top_level_subs' => array()); + $parent = 'top_level_subs'; + $this->_load($str, $this->template, $parents, $parent); + } + # This is useful when you have sub-templates that you want to mess with # before the main template is run. But can also be used to simply specify # the filename ahead of time. function load($filename) { $this->filename = $filename; - $tmp = read_whole_file($filename); - $this->template = ''; - $parents = array('top_level_subs' => array()); - $parent = 'top_level_subs'; - $this->_load($tmp, $this->template, $parents, $parent); + $this->load_str(read_whole_file($filename)); } # Run the template. Pass a filename, or a string, unless you've already # specified a template with load() function run($templ = false) { + $template_string = $this->template; + $template_file = $this->file; if($templ !== false) { if(strlen($templ) < 150 && file_exists($templ)) { - $this->filename = $templ; - unset($this->template); + $template_file = $templ; + unset($template_string); } else { - $this->template = $templ; + $template_string = $templ; } } - if(!$this->template) { - if(!$this->filename) { + if(!$template_string) { + if(!$template_file) { print "sorry, no template to run\n"; exit(1); } - $this->template = read_whole_file($this->filename); + $template_string = read_whole_file($template_file); } - return template_run($this->template, $this->keyval); + return template_run($template_string, $this->keyval); } # same as run() except the output is print()ed @@ -171,19 +181,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; } @@ -199,6 +217,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); @@ -214,11 +242,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); @@ -233,14 +272,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); @@ -255,7 +295,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() { @@ -263,4 +308,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; +} + ?>