Содержание


Placeholder Helper


Placeholder Helper



Помощник вида Placeholder (Заполнитель) используется для сохранения содержимого между скриптом вида и отображением. Так же имеются несколько полезных функций, таких как объединение содержимого, сохранение содержимого скрипта вида для последующего использования, добавления пред- и пост- текста, добавление разделителей.

Использование Placeholder

Для сохранения информации, которая будет отображаться. При каждом вызове помощника вида Placeholder ожидается указание его имени, затем возвращается соответствующий оюъект, содержащий  контейнер, который Вы можете изменить или просто вывести(например через «echo»).

<?php $this->placeholder('foo')->set("Some text for later") ?>
 
<?php
    echo $this->placeholder('foo');
    // outputs "Some text for later"
?>

Использование Placeholder для объединения содержимого (Aggregating content)

Иногда такая возможность бывает необходима. Например в скрипте вида есть массив переменных, в котором есть сообщения, которые нужно показать позже. И когда наступит момент их показывать, скрипт вида уже будет знать как это нужно сделать.

Placeholder использует конейнер расширяющий ArrayObject, предоставляя богаты функционал для работы с массивами. А так же есть много методов, позволяющих форматировать объекты, находящиеся в контейнере:

1) setPrefix($prefix). Задает текст, который будет добавлен как префикс к содержимому контейнера. getPrefix() – что б узнать, какой текст уже назначен.

2) setPostfix($prefix).Задает текст, который будет добавлен как постфикс(в конец) к содержимому контейнера. getPostfix() – что б узнать, какой текст уже назначен.

3) setSeparator($prefix). Разделитель для объединенного содержимого. getSeparator() -  что б узнать, какой разделитель уже назначен.

4) setIndent($prefix). Установка отступа для содержимого в контейнере.Если отправлено целое число – так е же количество пробелов будет использовано(применено). Если строка -  будет использована соответствующая строка. getIndent() -  что уже назначено.

Пример:

<!-- first view script -->
<?php $this->placeholder('foo')->exchangeArray($this->data) ?>
<!-- later view script -->
<?php
$this->placeholder('foo')->setPrefix("<ul>n    <li>")
                         ->setSeparator("</li><li>n")
                         ->setIndent(4)
                         ->setPostfix("</li></ul>n");
?>
 
<?php
    echo $this->placeholder('foo');
    // outputs as unordered list with pretty indentation
?>

Так как контейнер Placeholder расширяет ArrayObject, при добавлении Вы можете назначить ключ, а не просто отправить в массив. Так содержимое будет доступно или по ключу массива, либо свойству объекта.

<?php $this->placeholder('foo')->bar = $this->data ?>
<?php echo $this->placeholder('foo')->bar ?>
 
<?php
$foo = $this->placeholder('foo');
echo $foo['bar'];
?>

Placeholders для захвата содержимого (Capture Content)

Бывает, что содержимое для placeholder(заполнения) находиться непосредственно в скрипте вида, так как это иногда удобней. Помощник вида Placeholder позволяет захватить произвольное содержимое для позднего рендеринга. Это возможно при использовании следующего API:

captureStart($type, $key) -  начинает захват.

$type  - однаизконстант Placeholder (APPEND или SET).  Если APPEND, то захваченное содержимое добавляется перед текущем контентом, если SET -  заменяется текущее содержимое захваченным. По умолчанию APPEND.

$key -  назначает ключ для захваченного содержимого.

captureStart() – блокирует захват до captureEnd(). Нельзя использовать несколько захватов в одном контейнере заполнителя.

captureEnd() -  останавливает захват и помещает содержимое в контейнер объекта в зависимости с настройками captureStart().

<!-- Default capture: append -->
<?php $this->placeholder('foo')->captureStart();
foreach ($this->data as $datum): ?>
<div class="foo">
    <h2><?php echo $datum->title ?></h2>
    <p><?php echo $datum->content ?></p>
</div>
<?php endforeach; ?>
<?php $this->placeholder('foo')->captureEnd() ?>
 
<?php echo $this->placeholder('foo') ?>
<!-- Capture to key -->
<?php $this->placeholder('foo')->captureStart('SET', 'data');
foreach ($this->data as $datum): ?>
<div class="foo">
    <h2><?php echo $datum->title ?></h2>
    <p><?php echo $datum->content ?></p>
</div>
 <?php endforeach; ?>
<?php $this->placeholder('foo')->captureEnd() ?>
 
<?php echo $this->placeholder('foo')->data ?>

Реализации Placeholder в Zend Framework

В фреймворке уже есть набор различных реализаций Placeholder: Doctype, HeadLink, HeadMeta, HeadScript, HeadStyle, HeadTitle, InlineScript. Все они будут подробно рассмотрены в следующих пунктах документации.


Автор статьи: DuB