View Single Post
  #6  
Old 07-13-2012, 07:14 PM
Simon Lloyd's Avatar
Simon Lloyd Simon Lloyd is offline
 
Join Date: Aug 2008
Location: Manchester
Posts: 3,481
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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;

Reply With Quote
Благодарность от:
Firas Darwish
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01139 seconds
  • Memory Usage 1,815KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_box_bit
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • fetch_musername
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • post_thanks_function_fetch_thanks_bit_start
  • post_thanks_function_show_thanks_date_start
  • post_thanks_function_show_thanks_date_end
  • post_thanks_function_fetch_thanks_bit_end
  • post_thanks_function_fetch_post_thanks_template_start
  • post_thanks_function_fetch_post_thanks_template_end
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete