Files
smarty/docs/ru/programmers/caching/caching-cacheable.xml
2005-01-07 17:56:21 +00:00

143 lines
3.9 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="windows-1251"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: freespace Status: ready -->
<sect1 id="caching.cacheable">
<title>Управление кэшированием результатов работы плагинов</title>
<para>
Начиная с плагинов Smarty-2.6.0, кэшируемость плагинов может быть объявлена
во время их регистрации. Третий аргумент у register_block,
register_compiler_function и register_function называется
<parameter>$cacheable</parameter> и имеет значение по умолчанию true,
что соответствует поведению плагинов Smarty версии ранее 2.6.0
</para>
<para>
Если плагин регистрируется с $cacheable=false, плагин вызывается
каждый раз, когда страница отображается, даже если сама страница
кэширована. Поведение плагина немного похоже на функцию
<link linkend="plugins.inserts">insert</link>.
</para>
<para>
В отличие от <link linkend="language.function.insert">{insert}</link>,
атрибуты плагина не кэшируются по умолчанию. Они могут быть
объявлены как кэшируемые при помощи четвертого параметра -
<parameter>$cache_attrs</parameter>. <parameter>$cache_attrs</parameter>
это массив имен атрибутов, которые должны кэшироваться, чтобы
функция плагина брала значение в том виде, в котором оно было в момент
помещения страницы в кэш, каждый раз, когда страница запрашивается из кэша.
</para>
<example>
<title>Предотвращение кэширования результата работы плагина</title>
<programlisting role="php">
<![CDATA[
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
function remaining_seconds($params, &$smarty) {
$remain = $params['endtime'] - time();
if ($remain >=0)
return $remain . " second(s)";
else
return "done";
}
$smarty->register_function('remaining', 'remaining_seconds', false, array('endtime'));
if (!$smarty->is_cached('index.tpl')) {
// извлекаем $obj из БД и присваиваем...
$smarty->assign_by_ref('obj', $obj);
}
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Шаблон index.tpl:
</para>
<programlisting>
<![CDATA[
Оставшееся время: {remaining endtime=$obj->endtime}
]]>
</programlisting>
<para>
Количество секунд до endtime объекта $obj изменяется при каждом
обновлении страницы, даже если страница кэширована. Так как
атрибут endtime кэширован, объект извлекается из базы данных в тот момент,
когда страница помещается в кэш, но не во время последующих запросов
к странице.
</para>
</example>
<example>
<title>Предотвращение кэширования части страницы</title>
<programlisting role="php">
<![CDATA[
index.php:
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
function smarty_block_dynamic($param, $content, &$smarty) {
return $content;
}
$smarty->register_block('dynamic', 'smarty_block_dynamic', false);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
Шаблон index.tpl:
</para>
<programlisting>
<![CDATA[
Страница кэширована: {"0"|date_format:"%D %H:%M:%S"}
{dynamic}
Текущее время: {"0"|date_format:"%D %H:%M:%S"}
... выполняем разные действия ...
{/dynamic}
]]>
</programlisting>
</example>
<para>
Во время обновления страницы вы заметите, что даты отличаются.
Одна является "динамической", другая - "статической". Вы можете поместить
в конструкцию {dynamic}...{/dynamic} любой код и быть уверенным,
что он не будет помещён в кэш вместе с остальной частью страницы.
</para>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->