vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   parse_template question (https://vborg.vbsupport.ru/showthread.php?t=285519)

Firas Darwish 07-13-2012 05:01 PM

parse_template question
 
Hi,,

how can i use the parse_template hook to parse ALL the templates at once ?

Simon Lloyd 07-13-2012 05:10 PM

What do you mean parse all templates at once? what is it you want to do?

Firas Darwish 07-13-2012 05:13 PM

i want to use str_replace in all the templates

Simon Lloyd 07-13-2012 05:20 PM

Then just use your code in a plugin using the parse templates hook, it should work as you want.

Firas Darwish 07-13-2012 05:26 PM

to parse a SINGLE template i would use

PHP Code:

$vbulletin->templatecache['TEMPLATE_NAME'] = str_replace('Yahoo','Google',$vbulletin->templatecache['TEMPLATE_NAME']); 

can you give me an example of how to parse ALL the templates using parse_templates hook ?

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;



Firas Darwish 07-13-2012 06:44 PM

oh thank you simon
much thanks !


All times are GMT. The time now is 02:13 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02127 seconds
  • Memory Usage 1,749KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (2)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (7)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete