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 10-27-2013, 05:44 AM
Digital Jedi's Avatar
Digital Jedi Digital Jedi is offline
 
Join Date: Oct 2006
Location: PopCulturalReferenceLand
Posts: 5,171
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default preg_replace...er, What it Do?

Assuming I wanted to replace a large portion of the navbar template with a custom template, let's say from [minicode]<!-- nav buttons bar -->[/minicode] to [minicode]<!-- / nav buttons bar -->[/minicode], would the first part of this plugin be correct?

PHP Code:
$template $vbulletin->templatecache['navbar'];
$match '<!-- nav buttons bar/.+/nav buttons bar -->';
$replace $vbulletin->templatecache['djs_navbar']; 
This is assuming that dot matches newlines. What I don't know what to do know, is what to do with the [minicode]preg_replace[/minicode] function itself. I thought something like:

PHP Code:
$vbulletin->templatecache['navbar'] = preg_replace($match$replace$template); 
But until I've got the first part right, I'm just guessing. Not to mention, I have no idea which hook will work in this case.
Reply With Quote
  #2  
Old 10-27-2013, 06:46 AM
vBNinja's Avatar
vBNinja vBNinja is offline
 
Join Date: May 2011
Location: USA
Posts: 239
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

do you want to change it on all the pages? ... or?

--------------- Added [DATE]1382856632[/DATE] at [TIME]1382856632[/TIME] ---------------

also post exactly what you want to replace so i can write the regex for you
Reply With Quote
  #3  
Old 10-27-2013, 10:58 AM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I think what you have is almost right. You need the '/' delimiters around the entire pattern, and you need an 's' modifier at the end so that the '.' will match newlines. So Try:
Code:
$match = '/<!-- nav buttons bar.+nav buttons bar -->/s';
Reply With Quote
Благодарность от:
Digital Jedi
  #4  
Old 10-27-2013, 11:20 AM
nerbert nerbert is offline
 
Join Date: May 2008
Posts: 784
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

"\s\S" matches anything, including line breaks.

/<!-- nav buttons bar[\s\S]+?nav buttons bar -->/
Reply With Quote
Благодарность от:
Digital Jedi
  #5  
Old 10-27-2013, 05:58 PM
Digital Jedi's Avatar
Digital Jedi Digital Jedi is offline
 
Join Date: Oct 2006
Location: PopCulturalReferenceLand
Posts: 5,171
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ah, so I had my delimiters in the wrong place. Thanks for that. I'm pretty sure I can figure out the regex, but I wasn't sure if my PHP syntax was correct to start with. So the actual preg_replace function is written correctly?

PHP Code:
$vbulletin->templatecache['navbar'] = preg_replace($match$replace$template); 
And, I guess, there's no way to be sure about which hook to use.
Reply With Quote
  #6  
Old 10-27-2013, 06:42 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

The call looks correct. I think parse_templates is a good hook to use, since you know the templates will be cached at that time.
Reply With Quote
  #7  
Old 10-27-2013, 07:01 PM
Digital Jedi's Avatar
Digital Jedi Digital Jedi is offline
 
Join Date: Oct 2006
Location: PopCulturalReferenceLand
Posts: 5,171
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Looks like the regex works (totally forgot about [\s\S] ), and I got the navbar to disappear on global_complete and parse_templates. Yeah, parse_templates seems like the better one to use. Only thing now is the content of my custom template is not being inserted. But, at least I'm farther along than I was. Thanks again.
Reply With Quote
  #8  
Old 10-27-2013, 07:09 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Yeah, I was actually thinking vb4, but in vb3 global_start works too.
Reply With Quote
  #9  
Old 10-27-2013, 08:56 PM
Digital Jedi's Avatar
Digital Jedi Digital Jedi is offline
 
Join Date: Oct 2006
Location: PopCulturalReferenceLand
Posts: 5,171
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Interesting, I can get replace to work if I put the raw HTML in the $replace variable, but not my custom template. This line must still be wrong:

PHP Code:
$replace $vbulletin->templatecache['djs_navbar']; 
Reply With Quote
  #10  
Old 10-27-2013, 09:26 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Is your template being cached? If not you need a plugin on hook cache_templates and add the name of your template to the $globaltemplates array, or else you can call fetch_template() (although that would add an extra db query).
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:11 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.04587 seconds
  • Memory Usage 2,261KB
  • 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
  • (1)bbcode_code
  • (4)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (10)post_thanks_box
  • (2)post_thanks_box_bit
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (2)post_thanks_postbit
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)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
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete