Back to vBulletin 3 Articles

How-To Cache Templates
by Princeton 05 Jan 2006

This article assumes that you are building your own product with end-user options.


INTRODUCTORY ON CACHING TEMPLATES:

Whenever you create a product you should cache your templates by adding them to the $globaltemplates and $actiontemplates array.

$globaltemplates are templates loaded by all actions.
$actiontemplates are templates loaded when a specified action is called such as $do (e.g. ?do=edit).

TEMPLATES NOT CACHED:
When displaying an "error message" on the same page I notice that the templates are not cached.
This is due to the fact that the "action" does not have any templates to load (via $actiontemplates).*

To remedy this some coders add the uncached templates to the $globaltemplates array. However, this is the wrong way to do it. As a coder, our obligation is to cache the least amount of templates to consume less memory.

*NOTE: This usually happens when you are redirected back to the page via $_POST.

THE FIX:
To cache these templates, we add the following:
PHP Code:
$actiontemplates['insertsettings'] =& $actiontemplates['options']; 
below the $actiontemplates array.

EXAMPLE:
A blog product that I am working on will display an error message to the end-user upon an error. The error message will be on the same page (redirected back via $_POST) not a STANDARD_ERROR page.

The interface is full of options that at the very least requires the end-user to enter a TITLE and DESCRIPTION.

The interface is accessible by the action "do=options".
To cache the required templates to build the interface I add the templates to the $actiontemplates array such as:
PHP Code:
$actiontemplates = array(
    
'options' => array(
        
'gtblog_options',
        
'gtblog_radio_option',
        
'newpost_errormessage',
    ) 
Back to the interface...
whenever the end-user forgets to enter a TITLE an error message is displayed. (The system requires the title.)

When the error message is displayed none of the templates are cached. We are missing something...

To remedy this we need to look at the $_POST "do" action of the form. A closer look at the html source tells me that the "do" action is
HTML Code:
<input name="do" value="insertsettings" type="hidden">
With this new information we fix the uncached issue by adding
PHP Code:
$actiontemplates['insertsettings'] =& $actiontemplates['options']; 
below the $actiontemplates array.

The final code should look like this:
PHP Code:
$actiontemplates = array(
    
'options' => array(
        
'gtblog_options',
        
'gtblog_radio_option',
        
'newpost_errormessage',
    )
$actiontemplates['insertsettings'] =& $actiontemplates['options']; 
Attached Thumbnails
Click image for larger version
Name:	1.gif
Views:	720
Size:	18.7 KB
ID:	40428   Click image for larger version
Name:	1a.gif
Views:	1127
Size:	26.3 KB
ID:	40429  

vblts.ru supports vBulletin®, 2022-2024