Все довольно просто, плашдолер используется для сохранения данных между представлениями и макетами, а частичные - в определенных представлениях для выполнения конкретных задач.См. Эти выдержки из справочника.
77.4.1.6. Помощник заполнителя: помощник представления заполнителя используется для сохранения содержимого между сценариями представления и экземплярами представления.Он также предлагает некоторые полезные функции, такие как агрегирование содержимого, захват содержимого сценария представления для последующего использования и добавление к содержимому пре- и пост-текста (и пользовательских разделителей для агрегированного содержимого).
77.4.1.5. Помощник по частям: Помощник по частичным представлениям используется для рендеринга указанного шаблона в пределах его собственной переменной области.Основное использование - для повторно используемых фрагментов шаблона, с которыми вам не нужно беспокоиться о конфликтах имен переменных.Кроме того, они позволяют вам указывать частичные сценарии просмотра из определенных модулей.
Вот простой пример заполнителя, который звучит так, как вы хотите.(для сохранения данных)
<?php
//this is placed in my layout above the html and uses an action helper
//so that a specific action is called, you could also use view helpers or partials
$this->layout()->nav = $this->action('render', 'menu', null,
array('menu' => $this->mainMenuId))
?>
<div id="nav">
//Here the placeholder is called in the layout
<?php echo $this->layout()->nav ?>
</div>
в этом случае идентификаторы меню устанавливаются в начальной загрузке, но это не просто, просто:
protected function _initMenus() {
$view = $this->getResource('view');
$view->mainMenuId = 4;
$view->adminMenuId = 5;
}
[EDIT]
Я думаю, что лучший пример заполнителя может быть в порядке.Этот заполнитель представляет собой небольшую форму поиска, которую я использую в нескольких действиях на нескольких контроллерах в разных конфигурациях.
В этой конфигурации эта форма настроена на поиск только музыкальных исполнителей, контроллеры, использующие этот заполнитель, будут иметь разные пути для setAction (), разные метки и иногда другой текст заполнителя.Я использую эту же форму для поиска музыкальных и видео баз данных.
Если вы всегда используете одну и ту же настройку или интересуетесь этим больше, чем я, это можно настроить как плагин.
//in the controller
public function preDispatch() {
//add form
$searchForm = new Application_Form_Search();
$searchForm->setAction('/admin/music/update');
$searchForm->query->setAttribs(array('placeholder' => 'Search for Artist',
'size' => 27,
));
$searchForm->search->setLabel('Find an Artist\'s work.');
$searchForm->setDecorators(array(
array('ViewScript', array(
'viewScript' => '_searchForm.phtml'
))
));
//assign form to placeholder
$this->_helper->layout()->search = $searchForm;
}
Я использую заполнитель в моем макете (могутакже будет использоваться в любом скрипте представления).Форма поиска отображается, когда заполнитель имеет значение, и не отображается, когда заполнитель не имеет значения.
//in the layout.phtml
<?php echo $this->layout()->search ?>
и просто для завершения, вот частичное, которое форма использует в качестве декоратора видимости.
<article class="search">
<form action="<?php echo $this->element->getAction() ?>"
method="<?php echo $this->element->getMethod() ?>">
<table>
<tr>
<th><?php echo $this->element->query->renderLabel() ?></th>
</tr>
<tr>
<td><?php echo $this->element->query->renderViewHelper() ?></td>
</tr>
<tr>
<td><?php echo $this->element->search ?></td>
</tr>
</table>
</form>
</article>
Этот пример действительно должен показать разницу между частичным и заполнителем.