Просмотр файла manual-ru/caching.multiple.caches.html

Размер файла: 7.31Kb
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4. <title>Множественное кэширование страниц</title>
  5. <meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
  6. <link rel="home" href="index.html" title="Руководство по Smarty">
  7. <link rel="up" href="caching.html" title="Chapter 14. Кэширование">
  8. <link rel="prev" href="caching.html" title="Chapter 14. Кэширование">
  9. <link rel="next" href="caching.groups.html" title="Групповое кэширование">
  10. </head>
  11. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  12. <div class="navheader">
  13. <table width="100%" summary="Navigation header">
  14. <tr><th colspan="3" align="center">Множественное кэширование страниц</th></tr>
  15. <tr>
  16. <td width="20%" align="left">
  17. <a accesskey="p" href="caching.html">Prev</a> </td>
  18. <th width="60%" align="center">Chapter 14. Кэширование</th>
  19. <td width="20%" align="right"> <a accesskey="n" href="caching.groups.html">Next</a>
  20. </td>
  21. </tr>
  22. </table>
  23. <hr>
  24. </div>
  25. <div class="sect1" title="Множественное кэширование страниц">
  26. <div class="titlepage"><div><div><h2 class="title" style="clear: both">
  27. <a name="caching.multiple.caches"></a>Множественное кэширование страниц</h2></div></div></div>
  28. <p>
  29. Вы можете создавать несколько кэшированных копий для одного вызова функции display() или
  30. fetch(). Предположим, что по вызову display('index.tpl') должны отображаться данные,
  31. содержимое которых зависит от определенных условий, и вы хотите иметь несколько вариантов
  32. соответствующих кэшированных копий. Для этого необходимо передать в функцию идентификатор
  33. кэша (cache_id) в качестве второго параметра.
  34. </p>
  35. <div class="example">
  36. <a name="id2732357"></a><p class="title"><b>Example 14.6. Вызов display() с идентификатором кэша</b></p>
  37. <div class="example-contents"><pre class="programlisting">
  38.  
  39. require('Smarty.class.php');
  40. $smarty = new Smarty;
  41.  
  42. $smarty-&gt;caching = true;
  43.  
  44. $my_cache_id = $_GET['article_id'];
  45.  
  46. $smarty-&gt;display('index.tpl',$my_cache_id);
  47.  
  48. </pre></div>
  49. </div>
  50. <br class="example-break"><p>
  51. В примере мы передали переменную $my_cache_id в функцию display()
  52. в качестве cache_id. Для каждого уникального значения $my_cache_id будет создана
  53. кэшированная копия вывода index.tpl. Здесь, значение "article_id" было передано в скрипт
  54. через URL, присвоено переменной $my_cache_id и использовано как cache_id.
  55. </p>
  56. <div class="note" title="Техническое замечание" style="margin-left: 0.5in; margin-right: 0.5in;">
  57. <h3 class="title">Техническое замечание</h3>
  58. <p>
  59. Будьте очень осторожными при передаче значений от клиента (браузера)
  60. в Smarty (как и в любое PHP-приложение). Хотя приведенный пример
  61. фактического использования article_id прямо из URL выглядит нормально,
  62. он может иметь неприятные последствия. Значение cache_id используется для
  63. создания директории в файловой системе, поэтому, если пользователь решит
  64. передать крайне большое значение article_id или написать скрипт,
  65. который посылает случайные article_id с огромной частотой, это может вызвать
  66. проблемы на уровне сервера. Поэтому вам необходимо в обязательном порядке
  67. проверять данные из форм, перед тем как использовать их. В нашем случае,
  68. мы заранее знаем, что значение article_id имеет длину в 10 символов, состоит
  69. только из букв и цифр, а так же должно являться реальным
  70. идентификатором в базе данных. Все это необходимо проверить!
  71. </p>
  72. </div>
  73. <p>
  74. Имейте ввиду, что тоже самое значение cache_id необходимо использовать
  75. как второй параметр
  76. в функциях <a class="link" href="api.is.cached.html" title="is_cached">is_cached()</a> и
  77. <a class="link" href="api.clear.cache.html" title="clear_cache()">clear_cache()</a>, если вы хотите применить
  78. их к конкретному кэшу.
  79. </p>
  80. <div class="example">
  81. <a name="id2733575"></a><p class="title"><b>Example 14.7. Передача cache_id в is_cached()</b></p>
  82. <div class="example-contents"><pre class="programlisting">
  83.  
  84. require('Smarty.class.php');
  85. $smarty = new Smarty;
  86.  
  87. $smarty-&gt;caching = true;
  88.  
  89. $my_cache_id = $_GET['article_id'];
  90.  
  91. if(!$smarty-&gt;is_cached('index.tpl',$my_cache_id)) {
  92. // Кэша нет, поэтому присваиваем значение переменным.
  93. $contents = get_database_contents();
  94. $smarty-&gt;assign($contents);
  95. }
  96.  
  97. $smarty-&gt;display('index.tpl',$my_cache_id);
  98.  
  99. </pre></div>
  100. </div>
  101. <br class="example-break"><p>
  102. Вы можете удалить все кэшированные копии с конкретным cache_id, передав null в качестве
  103. первого параметра clear_cache().
  104. </p>
  105. <div class="example">
  106. <a name="id2733591"></a><p class="title"><b>Example 14.8. Удаление всех кэшированных копий с конкретным cache_id</b></p>
  107. <div class="example-contents"><pre class="programlisting">
  108.  
  109. require('Smarty.class.php');
  110. $smarty = new Smarty;
  111.  
  112. $smarty-&gt;caching = true;
  113.  
  114. // удаляем все кэшированные копии со значением "sports" в качестве cache_id
  115. $smarty-&gt;clear_cache(null,"sports");
  116.  
  117. $smarty-&gt;display('index.tpl',"sports");
  118.  
  119. </pre></div>
  120. </div>
  121. <br class="example-break"><p>
  122. Таким образом, вы можете группировать ваши кэшированные копии, назначая им
  123. одинаковые cache_id.
  124. </p>
  125. </div>
  126. <div class="navfooter">
  127. <hr>
  128. <table width="100%" summary="Navigation footer">
  129. <tr>
  130. <td width="40%" align="left">
  131. <a accesskey="p" href="caching.html">Prev</a> </td>
  132. <td width="20%" align="center"><a accesskey="u" href="caching.html">Up</a></td>
  133. <td width="40%" align="right"> <a accesskey="n" href="caching.groups.html">Next</a>
  134. </td>
  135. </tr>
  136. <tr>
  137. <td width="40%" align="left" valign="top">Chapter 14. Кэширование </td>
  138. <td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
  139. <td width="40%" align="right" valign="top"> Групповое кэширование</td>
  140. </tr>
  141. </table>
  142. </div>
  143. </body>
  144. </html>