[PHPTAL] 1.1.9 phptal:cache documentatioin

Kornel Lesinski kornel at aardvarkmedia.co.uk
Tue Nov 27 11:31:22 CET 2007


phptal:cache (note that's not tal:cache) caches element's HTML (processed  
output) for a given time. Time is a number with 'd', 'h', 'm' or 's'  
suffix, e.g.:

<div phptal:cache="3h">...</div>

This will cause this <div> to be evaluated at most once per 3 hours.


* Shared vs per-page cache

There's optional parameter that defines how cache should be shared. By  
default cache is not sensitive to template's context at all - it's shared  
between all pages that use that template.

You can add "per url" to have separate copy of given element for every  
URL, e.g.

<ul phptal:cache="10m per url">...</ul>

<ul> will be evaluated at most every 10 minutes and will have separate  
copy for each page/URL.

You can add "per expression" to have different cache copy for every  
different value of an expression. Expression must evaluate to a string  
(arrays/objects are not supported!). Expression cannot refer to variables  
defined using tal:define on the same element, because cache caches  
tal:define as well.

<p phptal:cache="1d per user/id">...</p>

<p> will be cached for one day and will have separate copy for every user  
id, so it can contain private user-specific data.


* Caveats

phptal:cache blocks can be nested, but outmost block will cache other  
blocks regardless of their freshness.
metal:fill-slot will behave erratically inside cached blocks. You must  
avoid caching elements that use it.

----

Cache is stored in the same directory as compiled templates.


To get most of the cache, you should pass objects to template that  
"lazily" fetch data only when asked. This way you can avoid needlessly  
preparing data for fragments of template that won't be evaluated, e.g.  
instead of:

$phptal->some_list = fetch_data_from_the_database();

use:

class Foo
{
	function get_list() {return fetch_data_from_the_database();}
}

$phptal->some_list = new Foo();

-- 
regards, Kornel



More information about the PHPTAL mailing list