Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
Prev Previous Post   Next Post Next
  #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
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 02:43 AM.


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.04103 seconds
  • Memory Usage 2,461KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (2)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (7)post_thanks_box
  • (1)post_thanks_box_bit
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit
  • (7)post_thanks_postbit_info
  • (7)postbit
  • (7)postbit_onlinestatus
  • (7)postbit_wrapper
  • (1)showthread_list
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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_threadedmode.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids_threaded
  • showthread_threaded_construct_link
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • 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
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete