CakePHP - Manual/Developing/Views/Elements /wiki/Manual/Developing/Views/Elements History/revisions of CakePHP/Manual/Developing/Views/Elements en-us 2009-03-09 21:44:44 /wiki/Manual/Developing/Views/Elements/show?time=2009-03-09+21%3A44%3A44 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a name=".manual.developing.views.elements" href="/wiki/Manual/Developing/Views/Elements" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Views&nbsp;/&nbsp;Elements</a> за <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+21%3A44%3A44">2009-03-09 21:44:44</a> и <a href="/wiki/Manual/Developing/Views/Elements">2009-03-11 11:47:26</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Вы&nbsp;можете ипользовать кэширование отображений, если установите параметр cache. Если присвоить ему&nbsp;true, то&nbsp;кэширование будет делаться на&nbsp;один день. Вы&nbsp;также можете установить другой срок действия кэширования. Смотрите раздел &laquo;Кэширование&raquo; для&nbsp;получения дополнительной информации по&nbsp;установке длительности.<br /> &lt;?php echo $this-&gt;element('helpbox', array('cache' =&gt; true)); ?&gt;<br /> Если вы&nbsp;визуализируете один и&nbsp;тот же&nbsp;элемент более одного раза и&nbsp;у вас&nbsp;доступно кэширование, то&nbsp;не забудьте каждый раз&nbsp;устанавливать параметр 'key' для&nbsp;другого имени. Это&nbsp;предотвратит перезапись результата кэширования предыдущего вызова element().<br /> echo $this-&gt;element('helpbox', array('cache' =&gt; array('key' =&gt; 'first_use', 'time' =&gt; '+1 day'), 'var' =&gt; $var));<br /> echo $this-&gt;element('helpbox', array('cache' =&gt; array('key' =&gt; 'second_use', 'time' =&gt; '+1 day'), 'var' =&gt; $differentVar));<br /> Код&nbsp;выше обеспечивает отдельное кэширование обоих элементов.<a name="h845-1"></a><h3>Запрос элементов из&nbsp;плагина</h3> Если вы&nbsp;используете плагин и&nbsp;желаете использовать элементы внутри плагина, то&nbsp;просто определите параметр plugin. Если отображение визуализируется для&nbsp;контроллера/действия плагина, то&nbsp;это автоматически укажет на&nbsp;элемент для&nbsp;плагина. Если элемент не&nbsp;существует в&nbsp;плагине, то&nbsp;программа будет искать в&nbsp;главном каталоге APP.<br /> &lt;?php echo $this-&gt;element('helpbox', array('plugin' =&gt; 'pluginname')); ?&gt;<br /> <span class="missingpage">&lt;&lt; Верстка</span><a href="/wiki/Layouts/edit?add=1" title="Создать эту страницу">?</a> | <span class="missingpage">Темы &gt;&gt;</span><a href="/wiki/Themes/edit?add=1" title="Создать эту страницу">?</a></div></div> 2009-03-09 21:43:57 /wiki/Manual/Developing/Views/Elements/show?time=2009-03-09+21%3A43%3A57 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Views/Elements" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Views&nbsp;/&nbsp;Elements</a> за <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+21%3A43%3A57">2009-03-09 21:43:57</a> и <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+21%3A44%3A44">2009-03-09 21:44:44</a></b><br /> <br /> No differences.</div> 2009-03-09 20:19:30 /wiki/Manual/Developing/Views/Elements/show?time=2009-03-09+20%3A19%3A30 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Views/Elements" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Views&nbsp;/&nbsp;Elements</a> за <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+20%3A19%3A30">2009-03-09 20:19:30</a> и <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+21%3A43%3A57">2009-03-09 21:43:57</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Для&nbsp;кэширования различных версий одного и&nbsp;того же&nbsp;элемента в&nbsp;приложении, доступен уникальный ключ кэша, использующий следующий формат:<br /> $this-&gt;element('helpbox',<br /> <div class="indent"><div class="indent"><div class="indent"><div class="indent">&#147;cache&#148; =&gt; array('time'=&gt; "+7 days&#148;,'key'=&gt;'unique value')</div></div></div></div> Вы&nbsp;можете получить все&nbsp;преимущества элементов, используя requestAction(). Функция requestAction() выбирает переменные отображения из&nbsp;действия контроллера и&nbsp;возвращает их&nbsp;в виде массива. Это&nbsp;позволяет вашим элементам соответствовать стилю MVC. Создайте действие контроллера, которое подготовит переменные отображения для&nbsp;ваших элементов, затем вызовите requestAction() внутри второго параметра функции element(), для&nbsp;передачи элементу переменных отображения из&nbsp;контроллера.<br /> Для&nbsp;того, чтобы сделать это, добавьте в&nbsp;ваш контроллер что-то, похожее на&nbsp;следующее:<br /> class <span class="missingpage">Posts&nbsp;Controller</span><a href="/wiki/PostsController/edit?add=1" title="Создать эту страницу">?</a> extends <span class="missingpage">App&nbsp;Controller</span><a href="/wiki/AppController/edit?add=1" title="Создать эту страницу">?</a> {<br /> <div class="indent"><div class="indent">...<br /> function index() {<br /> <div class="indent"><div class="indent">$posts = $this-&gt;paginate();<br /> if&nbsp;(isset($this-&gt;params['requested'])) {<br /> <div class="indent"><div class="indent">return $posts;<br /> </div></div>} else {<br /> <div class="indent"><div class="indent">$this-&gt;set(compact('posts'));<br /> </div></div>}<br /> </div></div>}</div></div> }<br /> И&nbsp;затем, в&nbsp;элементе мы&nbsp;можем получить доступ к&nbsp;пронумерованной модели постов (posts). Для&nbsp;получения последних пяти постов в&nbsp;упорядоченный список мы&nbsp;должны сделать нечто подобное:<br /> &lt;h2&gt;Последние посты&lt;/h2&gt;<br /> &lt;?php $posts = $this-&gt;requestAction('posts/index/sort:created/order:asc/limit:5'); ?&gt;<br /> &lt;?php foreach($posts as $post): ?&gt;<br /> &lt;ol&gt;<br /> <div class="indent"><div class="indent">&lt;li&gt;&lt;?php echo $post['Post']['title']; ?&gt;&lt;/li&gt;</div></div> &lt;/ol&gt;<br /> &lt;?php endforeach; ?&gt;<a name="h845-1"></a><h3>Кэширование элементов</h3></div></div> 2009-03-09 20:07:47 /wiki/Manual/Developing/Views/Elements/show?time=2009-03-09+20%3A07%3A47 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Views/Elements" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Views&nbsp;/&nbsp;Elements</a> за <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+20%3A07%3A47">2009-03-09 20:07:47</a> и <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+20%3A19%3A30">2009-03-09 20:19:30</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions">Вы&nbsp;можете передавать данные элементу через второй аргумент элемента:<br /> &lt;?php echo<br /> $this-&gt;element('helpbox', <br /> <div class="indent"><div class="indent">array(&laquo;helptext&raquo; =&gt; &laquo;Да, этот текст очень полезен.&raquo;));</div></div> ?&gt;<br /> Внутри файла элемента, все&nbsp;переданные переменные доступны, как&nbsp;члены массива (таким же&nbsp;образом, как&nbsp;set() в&nbsp;контроллере работает с&nbsp;файлами отображений).<br /> В&nbsp;примере выше файл /app/views/elements/helpbox.ctp может использовать переменную $helptext.<br /> %%(php) <br /> &lt;?php<br /> echo $helptext; //выводит &laquo;Да, этот текст очень полезен.&raquo;<br /> ?&gt;<br /> Функция element() комбинирует настройки для&nbsp;элемента с&nbsp;передаваемыми данными. Две&nbsp;настройки: 'cache' и&nbsp;'plugin'. Пример:<br /> &lt;?php echo<br /> $this-&gt;element('helpbox', <br /> <div class="indent"><div class="indent">array(<br /> <div class="indent"><div class="indent">&#147;helptext&#148; =&gt; &laquo;Это передано в&nbsp;элемент как $helptext&#148;<br /> &#147;foobar&#148; =&gt; &laquo;Это передано в&nbsp;элемент как $foobar&#148;<br /> &#147;cache&#148; =&gt; "+2 days&#148; //устанавливает кэширование в&nbsp;+2 days.<br /> &#147;plugin&#148; =&gt; &quot;&quot; //для выполнения элемента из&nbsp;плагина<br /> </div></div>)</div></div> );<br /> ?&gt;</div></div> 2009-03-08 12:30:05 /wiki/Manual/Developing/Views/Elements/show?time=2009-03-08+12%3A30%3A05 <div class="pageBefore"><img src="/wiki_/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" /></div><div class="page"> <b>Сравнение версий <a href="/wiki/Manual/Developing/Views/Elements" class="">/Manual&nbsp;/&nbsp;Developing&nbsp;/&nbsp;Views&nbsp;/&nbsp;Elements</a> за <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-08+12%3A30%3A05">2009-03-08 12:30:05</a> и <a href="/wiki/Manual/Developing/Views/Elements?time=2009-03-09+20%3A07%3A47">2009-03-09 20:07:47</a></b><br /> <br /> <b>Добавлено:</b><br /> <div class="additions"><br /> Многие приложения имеют небольшие блоки кода, который должен быть на&nbsp;каждой странице, иногда в&nbsp;разных местах. Cake может помочь вам&nbsp;повторять куски вашего веб-сайта, которые нужно неоднократно использовать. Эти&nbsp;повторяющиеся части называются элементами. Реклама, блоки помощи, навигационный контроль, дополнительные меню и&nbsp;выноски представлены в&nbsp;Cake как&nbsp;элементы. Элемент это&nbsp;в&nbsp;основном мини-отображение, которое можно включать в&nbsp;другие отображения. Элементы могут быть использованы для&nbsp;того, чтобы сделать ваше отображение более удобочитаемым, размещая повторяющиеся элементы в&nbsp;свои собственные файлы. Они&nbsp;также могут помочь вам&nbsp;повторно использовать фрагменты содержимого в&nbsp;вашем приложении.<br /> <br /> Элементы обитают в&nbsp;каталоге /app/views/elements/, и&nbsp;имеют расширение .ctp.<br /> <br /> <!--notypo--><div class="code"><code><span style="color: #000000"> <span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">element</span><span style="color: #007700">(</span><span style="color: #DD0000">'helpbox'</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">?&gt;</span> </span> </code></div><!--/notypo--><br /> <br /> <hr noshade="noshade" size="1" /> <a name="h845-1"></a><h3>Передача переменных в&nbsp;элемент</h3> <br /> <br /> <br /> <br /></div></div>