Документация Smarty


Множественное кэширование страниц

Вы можете создавать несколько кэшированных копий для одного вызова функции display() или fetch(). Предположим, что по вызову display('index.tpl') должны отображаться данные, содержимое которых зависит от определенных условий, и вы хотите иметь несколько вариантов соответствующих кэшированных копий. Для этого необходимо передать в функцию идентификатор кэша (cache_id) в качестве второго параметра.

Пример 14-6. Вызов display() с идентификатором кэша

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

$my_cache_id = $_GET['article_id'];

$smarty->display('index.tpl',$my_cache_id);

В примере мы передали переменную $my_cache_id в функцию display() в качестве cache_id. Для каждого уникального значения $my_cache_id будет создана кэшированная копия вывода index.tpl. Здесь, значение "article_id" было передано в скрипт через URL, присвоено переменной $my_cache_id и использовано как cache_id.

Техническое замечание: Будьте очень осторожными при передаче значений от клиента (браузера) в Smarty (как и в любое PHP-приложение). Хотя приведенный пример фактического использования article_id прямо из URL выглядит нормально, он может иметь неприятные последствия. Значение cache_id используется для создания директории в файловой системе, поэтому, если пользователь решит передать крайне большое значение article_id или написать скрипт, который посылает случайные article_id с огромной частотой, это может вызвать проблемы на уровне сервера. Поэтому вам необходимо в обязательном порядке проверять данные из форм, перед тем как использовать их. В нашем случае, мы заранее знаем, что значение article_id имеет длину в 10 символов, состоит только из букв и цифр, а так же должно являться реальным идентификатором в базе данных. Все это необходимо проверить!

Имейте ввиду, что тоже самое значение cache_id необходимо использовать как второй параметр в функциях is_cached() и clear_cache(), если вы хотите применить их к конкретному кэшу.

Пример 14-7. Передача cache_id в is_cached()

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

$my_cache_id = $_GET['article_id'];

if(!$smarty->is_cached('index.tpl',$my_cache_id)) {
	// Кэша нет, поэтому присваиваем значение переменным.
	$contents = get_database_contents();
	$smarty->assign($contents);
}

$smarty->display('index.tpl',$my_cache_id);

Вы можете удалить все кэшированные копии с конкретным cache_id, передав null в качестве первого параметра clear_cache().

Пример 14-8. Удаление всех кэшированных копий с конкретным cache_id

require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

// удаляем все кэшированные копии со значением "sports" в качестве cache_id
$smarty->clear_cache(null,"sports");

$smarty->display('index.tpl',"sports");

Таким образом, вы можете группировать ваши кэшированные копии, назначая им одинаковые cache_id.

SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…

Linux Optimization

Размещена 30 июля 2012 года

Prelink

читать далее…