Simon Lloyd |
07-13-2012 06:14 PM |
I suppose you could try $globaltemplates, but ideally for an str replace you'd build an array of template names.
--------------- Added [DATE]1342211263[/DATE] at [TIME]1342211263[/TIME] ---------------
This might help you write the function, this is directly out of /includes/functions_misc and its the section where they do an str replace on templates :)
PHP Code:
function replace_template_variables($template, $do_outside_regex = false) { // matches references to specifc arrays in templates and maps them to a better internal format // this function name is a slight misnomer; it can be run on phrases with variables in them too!
// include the $, but escape it in the key static $variables = array( '\$vboptions' => '$GLOBALS[\'vbulletin\']->options', '\$bbuserinfo' => '$GLOBALS[\'vbulletin\']->userinfo', '\$session' => '$GLOBALS[\'vbulletin\']->session->vars', );
// regexes to do the replacements; __FINDVAR__ and __REPLACEVAR__ are replaced before execution static $basic_find = array( '#\{__FINDVAR__\[(\\\\?\'|"|)([\w$[\]]+)\\1\]\}#', '#__FINDVAR__\[\$(\w+)\]#', '#__FINDVAR__\[(\w+)\]#', ); static $basic_replace = array( '" . __REPLACEVAR__[$1$2$1] . "', '" . __REPLACEVAR__[$$1] . "', '" . __REPLACEVAR__[\'$1\'] . "', );
foreach ($variables AS $findvar => $replacevar) { if ($do_outside_regex) { // this is handles replacing of vars outside of quotes do { // not in quotes = variable preceeded by an even number of ", does not count " escaped with an odd amount of \ // ... this was a toughie! $new_template = preg_replace( array( '#^([^"]*?("(?>(?>(\\\\{2})+?)|\\\\"|[^"])*"([^"]*?))*)' . $findvar . '\[(\\\\?\'|"|)([\w$[\]]+)\\5\]#sU', '#^([^"]*?("(?>(?>(\\\\{2})+?)|\\\\"|[^"])*"([^"]*?))*)' . $findvar . '([^[]|$)#sU', ), array( '$1' . $replacevar . '[$5$6$5]', '$1' . $replacevar . '$5', ), $template ); if ($new_template == $template) { break; } $template = $new_template; } while (true); }
// these regular expressions handle replacement of vars inside quotes $this_find = str_replace('__FINDVAR__', $findvar, $basic_find); $this_replace = str_replace('__REPLACEVAR__', $replacevar, $basic_replace);
$template = preg_replace($this_find, $this_replace, $template); }
// straight replacements - for example $scriptpath becomes $GLOBALS['vbulletin']->scriptpath static $str_replace = array( '$scriptpath' => '" . $GLOBALS[\'vbulletin\']->scriptpath . "', '$navbar_reloadurl' => '" . $GLOBALS[\'vbulletin\']->reloadurl . "', ); $template = str_replace(array_keys($str_replace), $str_replace, $template);
return $template; }
|