Get Smarty

Donate

Smarty Icon

You may use the Smarty logo according to the trademark notice.

Smarty Template Engine Smarty Template Engine

For sponsorship, advertising, news or other inquiries, contact us at:

Sites Using Smarty

Buy cheap glasses from Cheapglasses123.com and save up to 80%.

Where to buy prescription glasses? EyewearCanada.com is your best choice!

Where to buy discount wedding dresses and cheap smart dresses free shipping - Weddingdresstrend.com

Shop for 2018 World Cup Football Boots Online sale at guthjcc.com

Browse best 2018 world cup soccer cleats and shoes from SoccerAzteca.com

Advertisement

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

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

Example 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(), если вы хотите применить их к конкретному кэшу.

Example 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().

Example 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.

Comments
No comments for this page.
Post a Comment
All comments are moderated. Support questions are ignored, use the forums instead.
Author:
Email: (not shown)
What is 20 plus 7? (Are you human?)

Advertisement