Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 07-13-2012, 06:01 PM
Firas Darwish Firas Darwish is offline
 
Join Date: Sep 2011
Posts: 11
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default parse_template question

Hi,,

how can i use the parse_template hook to parse ALL the templates at once ?
Reply With Quote
  #2  
Old 07-13-2012, 06:10 PM
Simon Lloyd's Avatar
Simon Lloyd Simon Lloyd is offline
 
Join Date: Aug 2008
Location: Manchester
Posts: 3,481
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

What do you mean parse all templates at once? what is it you want to do?
Reply With Quote
  #3  
Old 07-13-2012, 06:13 PM
Firas Darwish Firas Darwish is offline
 
Join Date: Sep 2011
Posts: 11
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

i want to use str_replace in all the templates
Reply With Quote
  #4  
Old 07-13-2012, 06:20 PM
Simon Lloyd's Avatar
Simon Lloyd Simon Lloyd is offline
 
Join Date: Aug 2008
Location: Manchester
Posts: 3,481
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Then just use your code in a plugin using the parse templates hook, it should work as you want.
Reply With Quote
  #5  
Old 07-13-2012, 06:26 PM
Firas Darwish Firas Darwish is offline
 
Join Date: Sep 2011
Posts: 11
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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 ?
Reply With Quote
  #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
  #7  
Old 07-13-2012, 07:44 PM
Firas Darwish Firas Darwish is offline
 
Join Date: Sep 2011
Posts: 11
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

oh thank you simon
much thanks !
Reply With Quote
Reply


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:56 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07675 seconds
  • Memory Usage 2,249KB
  • Queries Executed 13 (?)
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
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (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)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_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
  • 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