Содержание


Partial Helper


Partial Helper



Помощник вида  Partial используется для рендеринга шаблонов в рамках своей области определения переменной. В основном используется для однотипных фрагментов шаблона кода, который часто используется в неизменном виде и когда уверены, что имена переменных не будут совпадать и создавать исключения.Родственным к Partial является помощник вида PartialLoop, позволяющий передавать итерируемые данные и рендерить их  частями для каждого элемента.

Важно: PartialLoop Counter. PartialLoop присваивает переменные шаблона в partialCounter, который передает конкретную позицию массива в шаблон. Это позволяет, например, создавать таблицы с чередующимися цветами строк или столбцов.

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

Применяется при рендере фрагмента шаболна в свою область видимости:

<?php // partial.phtml ?>
<ul>
    <li>From: <?php echo $this->escapeHtml($this->from) ?></li>
    <li>Subject: <?php echo $this->escapeHtml($this->subject) ?></li>
</ul>

В дальнейшем Вы сможете вызвать их в скрипте вида таким  образом:

<?php echo $this->partial('partial.phtml', array(
    'from' => 'Team Framework',
    'subject' => 'view partials')); ?>

На выводе получим такое:

<ul>
    <li>From: Team Framework</li>
    <li>Subject: view partials</li>
</ul>

Важно: что такое модель?
Когда говориться про модель в Partial, то это означает следующее:

1) Массив. Должен быть ассоциативным, так как его пары key/value будут переданы в шаблон как переменные.
2)Объект реализующий метод toArray(). И после выполнения этого метода будут переданы в шаблон как переменные.
3) Стандартный объект. Будет использоваться функция object_get_vars(), прикрепления к объекту вида.

Если Ваша модель является объектом,  возможно будет необходимость передать его в скрипт вида как объект, а не сериализировать в массив переменных. Это возможно передачей настройки ‘objectKey’  в соответствующий помощник:

// Tell partial to pass objects as 'model' variable
$view->partial()->setObjectKey('model');
 
// Tell partial to pass objects from partialLoop as 'model' variable
// in final partial view script:
$view->partialLoop()->setObjectKey('model');

Данная техника будет полезной при использовании Zend\Db и передаче данных в partialLoop(): Вы получите полноценный объект и все удобства связанные с этим.

Использование PartialLoop для рендеринга итерируемых моделей

Скорее всего Вы будете использовать Partial в циклах для  рендеринга одно и тогоже кода много раз. Так у Вас будет возможность повторять большие блоки в одном месте. Но это может  сказаться на производительности, так как как помощник Partial будет вызываться каждый раз для каждой итерации.

Эту проблему решает PartialLoop. Он позволяет передать итератор элемента(массив или объект)  как модель.

Давайте рассмотрим следующий скрипт вида:

<?php // partialLoop.phtml ?>
    <dt><?php echo $this->key ?></dt>
    <dd><?php echo $this->value ?></dd>

И такую модель:

$model = array(
    array('key' => 'Mammal', 'value' => 'Camel'),
    array('key' => 'Bird', 'value' => 'Penguin'),
    array('key' => 'Reptile', 'value' => 'Asp'),
    array('key' => 'Fish', 'value' => 'Flounder'),
);

Далее, в скрипте вида Вы можете использовать помощник PartialLoop:

<dl>
<?php echo $this->partialLoop('partialLoop.phtml', $model) ?>
</dl>

Выведет:

<dl>
    <dt>Mammal</dt>
    <dd>Camel</dd>
 
    <dt>Bird</dt>
    <dd>Penguin</dd>
 
    <dt>Reptile</dt>
    <dd>Asp</dd>
 
    <dt>Fish</dt>
    <dd>Flounder</dd>
</dl>

Рендеринг Partial в других моделях

Иногда Partial’ы (части) будут находиться в разных модулях. Если Вы знаете имена необходимых модулей, можете передать их как второй аргумент в partial() или partialLoop(), передвинув $model на третью позицию.

Например: есть Partial «pager» в модуле «list». Вы можете его использовать таким образом:

<?php echo $this->partial('pager.phtml', 'list', $pagerData) ?>

Теперь Вы можете использовать части (Partial) созданные в других/для других модулей в любом другом скрипте вида.


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