View Full Version : custom plugin that calls custom php, but only want php to fire on custom template?
moleculo
10-29-2009, 02:27 AM
Here's the scenario:
I made a custom php script that does some processing. I wanted to perform this processing only when a custom page was called. The PHP process is also outputting some HTML and other stuff that has to be displayed on the custom template.
To do this, I created a custom plug that is called on 'global_start'. It looks like this:
ob_start();
include('MYCUSTOMCODE.php');
$includedphp = ob_get_contents();
ob_end_clean();
In the custom template I have this:
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
$headinclude
<title>$vboptions[bbtitle] - $vbphrase[image_veri]</title>
</head>
<body>
$header
$navbar
$includedphp
$footer
It works great except for one major problem. MYCUSTOMCODE.php fires on every page load and click, even though it's not diplaying anything. This is causing a major performance problem on my site.
How do I make this custom PHP only fire when the custom template is being called?
Lynne
10-29-2009, 02:54 AM
Where is this custom template being called? If it's in a custom php page, then take that code out of the global_start plugin and just put it directly in your custom php page.
moleculo
10-29-2009, 03:37 AM
I tried that. It didn't work because the html output code from the PHP script interfered with the html in the custom template and the resulting page was FUBAR.
I actually have two custom PHP pages: the "standard" custom one (A) that calls the custom template, and the PHP script (B) that does all of the processing I need which also includes some HTML & Javascript output. (B) script is the one being loaded by global_start plug in that is also referenced in the custom template being called by php (A).
Either I'm not smart enough to do it the way you suggested, or it was just implemented wrong. Regardless, I couldn't get that to work.
--------------- Added 1256791419 at 1256791419 ---------------
Here's a copy of the fairly standard PHP script (B) that's calling the custom template.
<?php
// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// ##################### DEFINE IMPORTANT CONSTANTS #######################
// change the line below to the actual filename without ".php" extention.
// the reason for using actual filename without extention as a value of this constant is to ensure uniqueness of the value throughout every PHP file of any given vBulletin installation.
define('THIS_SCRIPT', 'mystuff');
// #################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array();
// get special data templates from the datastore
$specialtemplates = array();
// pre-cache templates used by all actions
$globaltemplates = array(
// change the lines below to the list of actual templates used in the script
'mystuff',
);
// pre-cache templates used by specific actions
$actiontemplates = array();
// ########################## REQUIRE BACK-END ############################
require_once('./global.php');
// #################### HARD CODE JAVASCRIPT PATHS ########################
$headinclude = str_replace('clientscript', $vbulletin->options['bburl'] . '/clientscript', $headinclude);
// ################################################## ######################
// ######################### START MAIN SCRIPT ############################
// ################################################## ######################
$navbits = array();
// change the line below to contain whatever you want to show in the navbar (title of your custom page)
$navbits[$parent] = 'My Stuff';
$navbits = construct_navbits($navbits);
eval('$navbar = "' . fetch_template('navbar') . '";');
// change the line below to contain the name of the actual main output template used in your script
eval('print_output("' . fetch_template('mystuff') . '");');
?>
Lynne
10-29-2009, 04:10 AM
Without seeing what you had tried before, I don't have any idea what went wrong. However, if you want to do it via the plugin method, you could put a condition around it:
if (THIS_SCRIPT == 'mystuff')
{
your plugin code
}
moleculo
10-29-2009, 04:18 AM
That worked perfectly. THANK YOU. I tried something like that before, but I had the syntax screwed up.
You're my hero today :) :)
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.