Размер файла: 7.31Kb
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>Множественное кэширование страниц</title>
- <meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
- <link rel="home" href="index.html" title="Руководство по Smarty">
- <link rel="up" href="caching.html" title="Chapter 14. Кэширование">
- <link rel="prev" href="caching.html" title="Chapter 14. Кэширование">
- <link rel="next" href="caching.groups.html" title="Групповое кэширование">
- </head>
- <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
- <div class="navheader">
- <table width="100%" summary="Navigation header">
- <tr><th colspan="3" align="center">Множественное кэширование страниц</th></tr>
- <tr>
- <td width="20%" align="left">
- <a accesskey="p" href="caching.html">Prev</a> </td>
- <th width="60%" align="center">Chapter 14. Кэширование</th>
- <td width="20%" align="right"> <a accesskey="n" href="caching.groups.html">Next</a>
- </td>
- </tr>
- </table>
- <hr>
- </div>
- <div class="sect1" title="Множественное кэширование страниц">
- <div class="titlepage"><div><div><h2 class="title" style="clear: both">
- <a name="caching.multiple.caches"></a>Множественное кэширование страниц</h2></div></div></div>
- <p>
- Вы можете создавать несколько кэшированных копий для одного вызова функции display() или
- fetch(). Предположим, что по вызову display('index.tpl') должны отображаться данные,
- содержимое которых зависит от определенных условий, и вы хотите иметь несколько вариантов
- соответствующих кэшированных копий. Для этого необходимо передать в функцию идентификатор
- кэша (cache_id) в качестве второго параметра.
- </p>
- <div class="example">
- <a name="id2732357"></a><p class="title"><b>Example 14.6. Вызов display() с идентификатором кэша</b></p>
- <div class="example-contents"><pre class="programlisting">
-
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->caching = true;
-
- $my_cache_id = $_GET['article_id'];
-
- $smarty->display('index.tpl',$my_cache_id);
-
- </pre></div>
- </div>
- <br class="example-break"><p>
- В примере мы передали переменную $my_cache_id в функцию display()
- в качестве cache_id. Для каждого уникального значения $my_cache_id будет создана
- кэшированная копия вывода index.tpl. Здесь, значение "article_id" было передано в скрипт
- через URL, присвоено переменной $my_cache_id и использовано как cache_id.
- </p>
- <div class="note" title="Техническое замечание" style="margin-left: 0.5in; margin-right: 0.5in;">
- <h3 class="title">Техническое замечание</h3>
- <p>
- Будьте очень осторожными при передаче значений от клиента (браузера)
- в Smarty (как и в любое PHP-приложение). Хотя приведенный пример
- фактического использования article_id прямо из URL выглядит нормально,
- он может иметь неприятные последствия. Значение cache_id используется для
- создания директории в файловой системе, поэтому, если пользователь решит
- передать крайне большое значение article_id или написать скрипт,
- который посылает случайные article_id с огромной частотой, это может вызвать
- проблемы на уровне сервера. Поэтому вам необходимо в обязательном порядке
- проверять данные из форм, перед тем как использовать их. В нашем случае,
- мы заранее знаем, что значение article_id имеет длину в 10 символов, состоит
- только из букв и цифр, а так же должно являться реальным
- идентификатором в базе данных. Все это необходимо проверить!
- </p>
- </div>
- <p>
- Имейте ввиду, что тоже самое значение cache_id необходимо использовать
- как второй параметр
- в функциях <a class="link" href="api.is.cached.html" title="is_cached">is_cached()</a> и
- <a class="link" href="api.clear.cache.html" title="clear_cache()">clear_cache()</a>, если вы хотите применить
- их к конкретному кэшу.
- </p>
- <div class="example">
- <a name="id2733575"></a><p class="title"><b>Example 14.7. Передача cache_id в is_cached()</b></p>
- <div class="example-contents"><pre class="programlisting">
-
- 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);
-
- </pre></div>
- </div>
- <br class="example-break"><p>
- Вы можете удалить все кэшированные копии с конкретным cache_id, передав null в качестве
- первого параметра clear_cache().
- </p>
- <div class="example">
- <a name="id2733591"></a><p class="title"><b>Example 14.8. Удаление всех кэшированных копий с конкретным cache_id</b></p>
- <div class="example-contents"><pre class="programlisting">
-
- require('Smarty.class.php');
- $smarty = new Smarty;
-
- $smarty->caching = true;
-
- // удаляем все кэшированные копии со значением "sports" в качестве cache_id
- $smarty->clear_cache(null,"sports");
-
- $smarty->display('index.tpl',"sports");
-
- </pre></div>
- </div>
- <br class="example-break"><p>
- Таким образом, вы можете группировать ваши кэшированные копии, назначая им
- одинаковые cache_id.
- </p>
- </div>
- <div class="navfooter">
- <hr>
- <table width="100%" summary="Navigation footer">
- <tr>
- <td width="40%" align="left">
- <a accesskey="p" href="caching.html">Prev</a> </td>
- <td width="20%" align="center"><a accesskey="u" href="caching.html">Up</a></td>
- <td width="40%" align="right"> <a accesskey="n" href="caching.groups.html">Next</a>
- </td>
- </tr>
- <tr>
- <td width="40%" align="left" valign="top">Chapter 14. Кэширование </td>
- <td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
- <td width="40%" align="right" valign="top"> Групповое кэширование</td>
- </tr>
- </table>
- </div>
- </body>
- </html>