To całkiem proste, placholder służy do utrzymywania danych między widokami a układami, a częściowe są używane w określonych widokach do wykonywania określonych zadań.
Zobacz te fragmenty odniesienia.
77.4.1.6. Symbol zastępczy pomocnika: Pomocnik widoku elementu zastępczego służy do utrzymywania zawartości między skryptami widoku a widokami instancji. To także oferuje kilka przydatnych funkcji, takich jak gromadzenie treści, przechwytywanie zawartości skryptu widoku do późniejszego wykorzystania oraz dodawanie treści przed i po treści do zawartości (i niestandardowe separatory zagregowanej treści).
77.4.1.5. Pomocnik częściowy: Pomocnik widoku częściowego służy do renderowania określonego szablonu w ramach jego własnego zakresu zmiennych. Głównym zastosowaniem jest do wielokrotnego użytku fragmentów szablonów, z którymi nie trzeba się martwić o zderzenia nazw zmiennych. Ponadto pozwalają na określenie częściowych skryptów widoku z określonych modułów.
Oto prosty przykład zastępczy, który brzmi jak to, co chcesz. (w celu zachowania danych)
<?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>
w tym przypadku id menu są ustawione w bootstrap, jednak nie jest to wymagane po prostu proste.
protected function _initMenus() {
$view = $this->getResource('view');
$view->mainMenuId = 4;
$view->adminMenuId = 5;
}
[EDIT]
myślę lepszym przykładem zastępczym może być w porządku. To miejsce jest małym formularzem wyszukiwania, którego używam w kilku akcjach w kilku kontrolerach w różnych konfiguracjach.
W tej konfiguracji ten formularz jest skonfigurowany do wyszukiwania tylko dla artystów muzycznych, kontrolery, które używają tego symbolu zastępczego będą miały różne ścieżki dla funkcji setAction(), różnych etykiet i czasami różnych symboli zastępczych. Używam tego samego formularza do wyszukiwania muzyki i wideo baz danych.
Zawsze używasz tej samej konfiguracji lub masz większe zainteresowanie robieniem tego, to robię, to można skonfigurować jako wtyczkę.
//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;
}
Używam symbolu zastępczego w moim układzie (może być również używany w dowolnym skrypcie widoku). Formularz wyszukiwania jest renderowany, gdy symbol zastępczy ma wartość i nie jest renderowany, gdy symbol zastępczy nie ma wartości.
//in the layout.phtml
<?php echo $this->layout()->search ?>
i po prostu być kompletne, tutaj jest częściowa, że forma wykorzystuje jako ViewScript dekoratora.
<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>
Ten przykład powinien naprawdę zilustrować różnicę między częściowym i zastępczym.
dzięki za wyjaśnienie. Czy istnieje prosty przykład obu przypadków użycia? Mam wymóg, w którym muszę wypełnić listę krajów i kontrolerów różnicy, a także modułów. Jaki byłby najlepszy sposób na utrzymanie tego szablonu w jednym miejscu i ponowne użycie go w modułach i kontrolerach. – neeraj