2012-02-09 13 views
8

In Zend Framework, Qualcuno può spiegare la differenza tra parziale e segnaposto?Zend Framework: qual è la differenza tra partial e segnaposto

Dalla mia comprensione, si può eseguire il rendering di un particolare modello/contenitore usando sia segnaposto che partial.

In quale condizione si dovrebbe utilizzare un parziale e quale scenario è ottimale per i segnaposto?

risposta

8

È 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 ?>&nbsp; 
    </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.

+0

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

1

Penso che quello che potrebbe essere più utile per voi qui è sia un aiutante visualizzazione personalizzata, eventualmente ampliando il Zend_View_Helper_FormSelect classe esistente o crearne uno personalizzato elemento Zend Modulo che si adatta alle vostre esigenze. In alternativa, uno script di aiuto che si trova in una posizione generale può essere la soluzione migliore.

+0

che voglio fare è fornire array dinamici di paesi da un singolo posto invece di fornire da preDispatch di ciascun controller. Il mio dropdown.phtml è posto nella cartella/application/views/scripts e voglio riutilizzare quel phtml usando zend partial/placeholder attraverso i miei diversi moduli e controller. – neeraj

+0

Ecco il mio codice di dropdown.phtml countries) && count ($ this-> countries)> 0):?> > neeraj

Problemi correlati