È piuttosto semplice, il placholder viene utilizzato per mantenere i dati tra viste e layout e i partial vengono utilizzati in viste specifiche per eseguire attività specifiche.
Vedere questi estratti dal riferimento.
77.4.1.6. Helper segnaposto: l'helper della vista segnaposto viene utilizzato per mantenere il contenuto tra gli script di visualizzazione e visualizzare le istanze. Inoltre, offre alcune funzioni utili come l'aggregazione del contenuto, l'acquisizione del contenuto dello script per l'utilizzo futuro e l'aggiunta di pre e post-testo al contenuto (e ai separatori personalizzati per il contenuto aggregato).
77.4.1.5. Helper parziale: l'helper della vista parziale viene utilizzato per eseguire il rendering di un modello specificato all'interno del proprio ambito variabile. L'utilizzo principale è per i frammenti di modelli riutilizzabili con i quali non è necessario preoccuparsi di in merito a conflitti nome variabile. Inoltre, consentono di specificare gli script di visualizzazione parziale da moduli specifici.
Ecco un semplice esempio di segnaposto, che suona come quello che vuoi. (A persistere dati)
<?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>
in questo caso il menu id sono impostati nel bootstrap, tuttavia questo non è requiered solo semplice.
protected function _initMenus() {
$view = $this->getResource('view');
$view->mainMenuId = 4;
$view->adminMenuId = 5;
}
[EDIT]
Credo che un esempio migliore segnaposto potrebbe essere in ordine. Questo segnaposto è un piccolo modulo di ricerca che utilizzo in diverse azioni in diversi controller in diverse configurazioni.
In questa configurazione Questo modulo è impostato per cercare solo per gli artisti musicali, i controllori che utilizzano questa segnaposto avrà percorsi diversi per setAction(), diverse etichette e talvolta diverso testo segnaposto. Io uso questo stesso modulo per cercare database musicali e video.
Se si utilizza sempre la stessa configurazione o se si ha più interesse a farlo, è possibile configurarlo come plug-in.
//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;
}
Io uso il segnaposto nel mio layout (può essere utilizzato anche in qualsiasi script di visualizzazione). Il modulo di ricerca viene visualizzato quando il segnaposto ha un valore e non viene visualizzato quando il segnaposto non ha alcun valore.
//in the layout.phtml
<?php echo $this->layout()->search ?>
e solo per essere completa, ecco la parziale che il modulo utilizza come decoratore ViewScript.
<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>
Questo esempio dovrebbe illustrare la differenza tra parziale e segnaposto.
grazie per la spiegazione. C'è un semplice esempio di entrambi i casi d'uso? Ho un requisito in cui ho bisogno di compilare un elenco a discesa del paese presso i controller di differenza e i moduli. Quindi quale sarebbe il modo migliore per mantenere quel modello in un unico posto e riutilizzarlo attraverso i moduli e i controller. – neeraj