phptal:cache

Этот атрибут позволяет кешировать на диске результат обработки элемента (включая его тег). Готовое кешированное значение будет использовано до тех пор, пока срок действия кеша не истечет.

Примечание

Использование кеша рекомендуется только для элементов со сложными выражениями, вычислениями, макросами из внешних файлов или PHP доступа к БД. Во всех других случаях, некешированные шаблоны будут настолько же быстро обрабатываться, как и кешированные.

В атрибуте необходимо указать, как долго должен сохраниться кеш. Для этого нужно записать число с суффиксом 'd', 'h', 'm' или 's'.

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

<div> будет заново обработан как минимум раз в 3 часа.

Можно ограничить "видимость" кеша, дописав "per". По умолчанию, кеш видим всем страницам, использующим этот шаблон. Используйте "per url", чтобы заданный элемент кешировался отдельно для разных URL.

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

<ol> будет кеширован на один день, отдельно для каждой страницы.

Можно указать "per expression", где expression - некое выражение. Тогда отдельные значения в кеше будут генерироваться для каждого разного значения этого выражения (выражение ДОЛЖНО в результате давать строку). Выражение не может использовать переменные, определенные в том же элементе с помощью tal:define.

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

<ul> будет кешироваться каждые 25 минут, отдельно для каждого ID объекта.

Принудительное обновление

Вместо того, чтобы очищать кеш, разумно использовать версию или время последних изменений вместе с per. Это повлечет за собой регенерацию кеша каждый раз, когда версия или время правки будут изменены. В этом случае, можно обойтись без очистки кеша.

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

Ограничения:

  • Блоки phptal:cache могут быть вложенными, но самый внешний блок будет кешировать все вложенные блоки, несмотря на состояние их актуальности.

  • Нельзя использовать metal:fill-slot внутри элементов с phptal:cache.