CakePHP : Manual/Developing/Views/Elements

Элементы


Многие приложения имеют небольшие блоки кода, который должен быть на каждой странице, иногда в разных местах. Cake может помочь вам повторять куски вашего веб-сайта, которые нужно неоднократно использовать. Эти повторяющиеся части называются элементами. Реклама, блоки помощи, навигационный контроль, дополнительные меню и выноски представлены в Cake как элементы. Элемент это в основном мини-отображение, которое можно включать в другие отображения. Элементы могут быть использованы для того, чтобы сделать ваше отображение более удобочитаемым, размещая повторяющиеся элементы в свои собственные файлы. Они также могут помочь вам повторно использовать фрагменты содержимого в вашем приложении.

Элементы обитают в каталоге /app/views/elements/, и имеют расширение .ctp.

<?php echo $this->element('helpbox'); ?>



Передача переменных в элемент


Вы можете передавать данные элементу через второй аргумент элемента:

<?php echo
$this->element('helpbox'
    array(
"helptext" => "Да, этот текст очень полезен."));
?>


Внутри файла элемента, все переданные переменные доступны, как члены массива (таким же образом, как set() в контроллере работает с файлами отображений).
В примере выше файл /app/views/elements/helpbox.ctp может использовать переменную $helptext.

<?php
echo $helptext//выводит  "Да, этот текст очень полезен."
?>


Функция element() комбинирует настройки для элемента с передаваемыми данными. Две настройки: 'cache' и 'plugin'. Пример:

<?php echo
$this->element('helpbox'
    array(
        
"helptext" => "Это передано в элемент как $helptext"
        "foobar" 
=> "Это передано в элемент как $foobar"
        "cache" 
=> "+2 days" //устанавливает кэширование в +2 days.
        
"plugin" => "" //для выполнения элемента из плагина
    
)
);
?>


Для кэширования различных версий одного и того же элемента в приложении, доступен уникальный ключ кэша, использующий следующий формат:

<?php
$this
->element('helpbox',
    array(
        
"cache" => array('time'=> "+7 days",'key'=>'unique value')
    )
);
?>


Вы можете получить все преимущества элементов, используя requestAction(). Функция requestAction() выбирает переменные отображения из действия контроллера и возвращает их в виде массива. Это позволяет вашим элементам соответствовать стилю MVC. Создайте действие контроллера, которое подготовит переменные отображения для ваших элементов, затем вызовите requestAction() внутри второго параметра функции element(), для передачи элементу переменных отображения из контроллера.

Для того, чтобы сделать это, добавьте в ваш контроллер что-то, похожее на следующее:

<?php
class PostsController extends AppController {
    ...
    function 
index() {
        
$posts $this->paginate();
        if (isset(
$this->params['requested'])) {
            return 
$posts;
        } else {
            
$this->set(compact('posts'));
        }
    }
}
?>


И затем, в элементе мы можем получить доступ к пронумерованной модели постов (posts). Для получения последних пяти постов в упорядоченный список мы должны сделать нечто подобное:

<h2>Последние посты</h2>
<?php $posts $this->requestAction('posts/index/sort:created/order:asc/limit:5'); ?>
<?php 
foreach($posts as $post): ?>
<ol>
    <li><?php echo $post['Post']['title']; ?></li>
</ol>
<?php endforeach; ?>



Кэширование элементов



Вы можете ипользовать кэширование отображений, если установите параметр cache. Если присвоить ему true, то кэширование будет делаться на один день. Вы также можете установить другой срок действия кэширования. Смотрите раздел «Кэширование» для получения дополнительной информации по установке длительности.

<?php echo $this->element('helpbox', array('cache' => true)); ?>


Если вы визуализируете один и тот же элемент более одного раза и у вас доступно кэширование, то не забудьте каждый раз устанавливать параметр 'key' для другого имени. Это предотвратит перезапись результата кэширования предыдущего вызова element().

<?php
echo $this->element('helpbox', array('cache' => array('key' => 'first_use''time' => '+1 day'), 'var' => $var));

echo 
$this->element('helpbox', array('cache' => array('key' => 'second_use''time' => '+1 day'), 'var' => $differentVar));
?>


Код выше обеспечивает отдельное кэширование обоих элементов.


Запрос элементов из плагина


Если вы используете плагин и желаете использовать элементы внутри плагина, то просто определите параметр plugin. Если отображение визуализируется для контроллера/действия плагина, то это автоматически укажет на элемент для плагина. Если элемент не существует в плагине, то программа будет искать в главном каталоге APP.

<?php echo $this->element('helpbox', array('plugin' => 'pluginname')); ?>


<< Верстка | Темы >>