Prev |  | Next

### `phptal:cache`

This attribute causes output of entire element (including its tag) to be cached on disk and not re-evaluated until cache expires.

#### Note

Use of cache is beneficial only for elements that use very complex expressions, macros from external files or PHP expressions/objects that access the database. Otherwise uncached templates will be just as fast.

Content of this attribute is a duration (how long element should be kept in cache) written as number with ' `d`', ' `h`', ' `m`' or ' `s`' suffix.

                <div class="footer" phptal:cache="3h">…</div>

`<div>` will be evaluated at most once per 3 hours.

Duration can be followed by optional " `per`" parameter that defines how cache should be shared. By default cache is shared between all pages that use that template. You can add " `per url`" to have separate copy of given element for every URL.

                <ol id="breadcrumbs" phptal:cache="1d per url">…</ol>

`<ol>` will be cached for one day, separately for each page.

You can add " `per expression`" to have different cache copy for every different value of an expression (which MUST evaluate to a string).

#### Note

Expression cannot refer to variables defined using `tal:define` on the same element.

                <ul id="user-info" phptal:cache="25m per object/id">…</ul>

`<ul>` will be cached for 25 minutes, separately for each object ID.

#### Warning

Be careful when caching users' private data. Cache will be shared with everyone unless you make it user-specific with `per user/id` or similar expression.

#### Instant refreshing

Instead of clearing cache, it might be a better idea to put version or last modification timestamp in the `per` parameter. This will cause cached template to be refreshed as soon as version/timestamp changes and no special cache clearing will be necessary.

                  <div phptal:cache="100d per php:news.id . news.last_modified_date">…</div>

#### Limitations:

- `phptal:cache` blocks can be nested, but outmost block will cache other blocks regardless of their freshness.

- You cannot use `metal:fill-slot` inside elements with `phptal:cache`.

Prev | Up | Next
`phptal:debug` | Home | `phptal:tales`