2012-02-09 15 views

Odpowiedz

8

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

+0

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

1

I pomyśleć, co może być bardziej pomocne, tutaj jest albo niestandardowy widok pomocnika, ewentualnie rozszerzenie na istniejącym Zend_View_Helper_FormSelect klasy lub utworzyć niestandardowy Zend element formularz który odpowiada Twoim potrzebom. Ewentualnie skrypt pomocniczy, który znajduje się w ogólnej lokalizacji, może być najlepszym wyborem.

+0

Chcę to zapewnić dynamiczną tablicę krajów z jednego miejsca zamiast dostarczać z preDispatch każdego kontrolera. Mój dropdown.phtml znajduje się w folderze/application/views/scripts i chcę ponownie użyć tego phtml używając zend partial/placeholder w moich różnych modułach i kontrolerze. – neeraj

+0

Oto mój kod dropdown.phtml countries) && count ($ this-> countries)> 0):?> kraje jako $ c):?> nazwa; ?> > neeraj