Files
smarty/docs/ru/programmers/caching/caching-multiple-caches.xml
freespace e799943aba Converted all line endings from CRLF to LF.
Sorry for such a big commit, but this should be done only once.
And please, don't kill me if I did a stupid thing :)
2004-11-25 23:26:13 +00:00

124 lines
4.0 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.2 Maintainer: tony2001 Status: ready -->
<sect1 id="caching.multiple.caches">
<title>Множественное кэширование страниц</title>
<para>
Вы можете создавать несколько кэшированных копий для одного вызова функции display() или
fetch(). Предположим, что по вызову display('index.tpl') должны отображаться данные,
содержимое которых зависит от определенных условий, и вы хотите иметь несколько вариантов
соответствующих кэшированных копий. Для этого необходимо передать в функцию идентификатор
кэша (cache_id) в качестве второго параметра.
</para>
<example>
<title>Вызов display() с идентификатором кэша</title>
<programlisting>
<![CDATA[
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
$my_cache_id = $_GET['article_id'];
$smarty->display('index.tpl',$my_cache_id);
]]>
</programlisting>
</example>
<para>
В примере мы передали переменную $my_cache_id в функцию display()
в качестве cache_id. Для каждого уникального значения $my_cache_id будет создана
кэшированная копия вывода index.tpl. Здесь, значение "article_id" было передано в скрипт
через URL, присвоено переменной $my_cache_id и использовано как cache_id.
</para>
<note>
<title>Техническое замечание</title>
<para>
Будьте очень осторожными при передаче значений от клиента (браузера)
в Smarty (как и в любое PHP-приложение). Хотя приведенный пример
фактического использования article_id прямо из URL выглядит нормально,
он может иметь неприятные последствия. Значение cache_id используется для
создания директории в файловой системе, поэтому, если пользователь решит
передать крайне большое значение article_id или написать скрипт,
который посылает случайные article_id с огромной частотой, это может вызвать
проблемы на уровне сервера. Поэтому вам необходимо в обязательном порядке
проверять данные из форм, перед тем как использовать их. В нашем случае,
мы заранее знаем, что значение article_id имеет длину в 10 символов, состоит
только из букв и цифр, а так же должно являться реальным
идентификатором в базе данных. Все это необходимо проверить!
</para>
</note>
<para>
Имейте ввиду, что тоже самое значение cache_id необходимо использовать
как второй параметр
в функциях <link linkend="api.is.cached">is_cached()</link> и
<link linkend="api.clear.cache">clear_cache()</link>, если вы хотите применить
их к конкретному кэшу.
</para>
<example>
<title>Передача cache_id в is_cached()</title>
<programlisting>
<![CDATA[
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);
]]>
</programlisting>
</example>
<para>
Вы можете удалить все кэшированные копии с конкретным cache_id, передав null в качестве
первого параметра clear_cache().
</para>
<example>
<title>Удаление всех кэшированных копий с конкретным cache_id</title>
<programlisting>
<![CDATA[
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching = true;
// удаляем все кэшированные копии со значением "sports" в качестве cache_id
$smarty->clear_cache(null,"sports");
$smarty->display('index.tpl',"sports");
]]>
</programlisting>
</example>
<para>
Таким образом, вы можете группировать ваши кэшированные копии, назначая им
одинаковые cache_id.
</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
-->