vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB4 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=252)
-   -   Plugin conflict: template hooks break when I use $templater = vB_Template::create(); (https://vborg.vbsupport.ru/showthread.php?t=284057)

DetroitYES 06-06-2012 05:59 PM

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

kh99 06-06-2012 07:29 PM

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.

Lynne 06-06-2012 10:45 PM

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).

DetroitYES 06-07-2012 04:03 PM

Quote:

Originally Posted by Lynne (Post 2337278)
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;



kh99 06-07-2012 04:13 PM

Quote:

Originally Posted by DetroitYES (Post 2337497)
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.

DetroitYES 06-07-2012 04:23 PM

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?

kh99 06-07-2012 04:29 PM

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?

DetroitYES 06-07-2012 04:49 PM

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


All times are GMT. The time now is 09:13 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.01171 seconds
  • Memory Usage 1,759KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (5)bbcode_php_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (8)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.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
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete