Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 Programming Discussions
  #1  
Old 06-06-2012, 05:59 PM
DetroitYES's Avatar
DetroitYES DetroitYES is offline
 
Join Date: Mar 2009
Posts: 43
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Plugin conflict: template hooks break when I use $templater = vB_Template::create();

I'm having a strange error where calling $templater = vB_Template::create(); in a plugin causes other plugins that utilize template hooks to break.

here is the plugin that calls $templater = vB_Template::create();

product: vBulletin
hook location: global_start
execution order: 5


PHP Code:

include($_SERVER['DOCUMENT_ROOT'].'/_components/globalvars.php');
// Register my_var with the custom template
$templater vB_Template::create('test_Open');

$resorts = array("a""b""c""d");
$resort highest_directory(); //called from test_php_functions, which is included on left_sidebar template...

ob_start();

include(
$_SERVER['DOCUMENT_ROOT'].'/_components/blocks/template_blocks/header.php');

$header_html ob_get_contents();
    
ob_end_clean();

ob_start();

include (
$_SERVER['DOCUMENT_ROOT'].$site_components.'/blocks/booking-widget.php');

$booking_widget ob_get_contents();
    
ob_end_clean();

$templater->register('booking_widget'$booking_widget);
$templater->register('header_html'$header_html);


// Render the custom template
$my_template_output $templater->render();

// Add the output from the template to the header template
$global_temp $GLOBALS['header'];
$GLOBALS['header'] = $my_template_output;
$GLOBALS['header'] .= $global_temp
here is the plugin breaks when the above plugin is active:

product: atdtwt
hook location: showthread_start (also tried global_start)
execution order: 5 (also tried 4 and 10)

I also tried using diffrent template hooks (head

PHP Code:

$atdtwt_js 
"\n".'<script type="text/javascript" src="atdtwt_js.php?do=main"></script>'."\n".'<link rel="stylesheet" type="text/css" href="clientscript/atdtwt/main.css" />'."\n";

$template_hook[headinclude_bottom_css] .= $atdtwt_js
If i change the first plugin to the following, the above plugin will work:

PHP Code:

include($_SERVER['DOCUMENT_ROOT'].'/_components/globalvars.php');
// Register my_var with the custom template
//$templater = vB_Template::create('test_Open');

$resorts = array("a""b""c""d");
$resort highest_directory(); //called from test_php_functions, which is included on left_sidebar template...

ob_start();

include(
$_SERVER['DOCUMENT_ROOT'].'/_components/blocks/template_blocks/header.php');

$header_html ob_get_contents();
    
ob_end_clean();

ob_start();

include (
$_SERVER['DOCUMENT_ROOT'].$site_components.'/blocks/booking-widget.php');

$booking_widget ob_get_contents();
    
ob_end_clean();

//$templater->register('booking_widget', $booking_widget);
//$templater->register('header_html', $header_html);


// Render the custom template
//$my_template_output = $templater->render();

// Add the output from the template to the header template
//$global_temp = $GLOBALS['header'];
//$GLOBALS['header'] = $my_template_output;
//$GLOBALS['header'] .= $global_temp; 
I was able to isolate $templater = vB_Template::create(); as the problem by clearing out the code in the plugin, and making a call to an empty template (as to ensure the template wasn't the problem)...

PHP Code:

$templater 
vB_Template::create('DUMMY'); 
What's going on, any ideas? This happens in the VB4 default skin. I've just installed vb 4.2.0
Reply With Quote
  #2  
Old 06-06-2012, 07:29 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Change the second (broken) plugin to use hook parse_templates. Your use of a template in global_start causes the 'standard' templates (including headinclude) to be rendered, so by the time execution reaches showthread_start it's too late to set a template hook.

Edit: you may also have to enclose the code in that second template in if (THIS_SCRIPT == 'showthread') { /* code here */ } otherwise it will be on every page.
Reply With Quote
  #3  
Old 06-06-2012, 10:45 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Just to add that global_start is also deprecated. People need to start paying attention to that because it could disappear at any time (it's been two years since it was deprecated).
Reply With Quote
2 благодарности(ей) от:
DetroitYES, Diggo11
  #4  
Old 06-07-2012, 04:03 PM
DetroitYES's Avatar
DetroitYES DetroitYES is offline
 
Join Date: Mar 2009
Posts: 43
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Lynne View Post
Just to add that global_start is also deprecated. People need to start paying attention to that because it could disappear at any time (it's been two years since it was deprecated).
I think this points more towards the root of the problem. If i change the borken plugin to fire on parse_templates, the product will then fail to work on boards that don't utilize vB_Template::create(); at global_start...

Edit: I changed the broken plugin to kh99's suggestion and the template plugins to fire at global_bootstrap_init_start and that seemed to have solved it. The plugin works correctly in my custom skin and the default now. Thanks.


product: atdtwt
hook location: parse_templates
execution order: 5
PHP Code:

if (THIS_SCRIPT == 'showthread') {
    
$atdtwt_js "\n".'<script type="text/javascript" src="atdtwt_js.php?do=main">    </script>'."\n".'<link rel="stylesheet" type="text/css" href="clientscript/atdtwt/main.css" />'."\n";

    
$template_hook[headinclude_bottom_css] .= $atdtwt_js;

Reply With Quote
  #5  
Old 06-07-2012, 04:13 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by DetroitYES View Post
If i change the borken plugin to fire on parse_templates, the product will then fail to work on boards that don't utilize vB_Template::create(); at global_start...
I don't think that's true. parse_templates is always called just before the header, headinclude, headinclude_bottom, and footer templates are rendered, so I believe that's the correct hook to use for a plugin that wants to add to one of those templates. In fact, if the goal of your new plugin is to add to one of those templates then you'd probably want to use that hook as well.
Reply With Quote
Благодарность от:
Diggo11
  #6  
Old 06-07-2012, 04:23 PM
DetroitYES's Avatar
DetroitYES DetroitYES is offline
 
Join Date: Mar 2009
Posts: 43
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

One more minor thing, changing to global_bootstrap_init_start seems to have removed the titles 'Quick Style Chooser', 'Standard Styles', and 'Mobile Styles' from my quick style chooser? Am I causing another conflict?
Reply With Quote
  #7  
Old 06-07-2012, 04:29 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I don't know why that is, but my guess is that global_bootstrap_init_start may be called too early for what your plugin is doing.

Edit: have you tried global_bootstrap_complete?
Reply With Quote
Благодарность от:
DetroitYES
  #8  
Old 06-07-2012, 04:49 PM
DetroitYES's Avatar
DetroitYES DetroitYES is offline
 
Join Date: Mar 2009
Posts: 43
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That did it, all is well, thanks a lot everyone.
Reply With Quote
Reply

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 06:51 AM.


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.07090 seconds
  • Memory Usage 2,262KB
  • Queries Executed 11 (?)
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
  • (5)bbcode_php
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (8)post_thanks_box
  • (4)post_thanks_box_bit
  • (8)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (3)post_thanks_postbit
  • (8)post_thanks_postbit_info
  • (8)postbit
  • (8)postbit_onlinestatus
  • (8)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_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