2012-02-09 59 views
8

在Zend Framework中,任何人都可以解釋partial和placeholder之間的區別嗎?Zend Framework:部分和佔位符之間有什麼區別

從我的理解,可以通過使用佔位符和部分來呈現特定的模板/容器。

在哪種情況下應該使用部分和什麼情況是佔位符的最佳用法?

回答

8

這非常簡單,placholder用於在視圖和佈局之間保存數據,部分在特定視圖中用於執行特定任務。
請參閱參考文獻的摘錄。

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

在這種情況下,菜單id的設置在bootstrap中,但這不是簡單的要求。

protected function _initMenus() { 

     $view = $this->getResource('view'); 
     $view->mainMenuId = 4; 
     $view->adminMenuId = 5; 
    } 

[編輯]

我想一個更好的佔位符的例子可能是爲了。這個佔位符是一個小型的搜索表單,我在幾個不同配置的控制器的幾個動作中使用。

在此配置中,此表單設置爲僅搜索音樂藝術家,使用此佔位符的控制器將具有不同的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 ?> 

和公正是完整的,下面是部分的形式使用作爲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> 

這個例子應該說明部分和佔位符的區別。

+0

感謝您的解釋。有兩個用例的簡單例子嗎?我有一個要求,我需要在差異控制器以及模塊中填充一個國家/地區。那麼,如何將這個模板保存在一個地方並在整個模塊和控制器中重複使用它呢? – neeraj 2012-02-09 09:01:10

1

我覺得你在這裏可以是一個自定義的視圖助手,在現有Zend_View_Helper_FormSelect類可能擴大或創建一個自定義適合自己需要的Zend表單元素什麼可能更有幫助。或者,在一般位置的幫手腳本可能是最好的選擇。

+0

我想要做的是從一個地方提供動態的國家數組,而不是從每個控制器的preDispatch提供。我的dropdown.phtml放在/ application/views/scripts文件夾中,我想重複使用這個phtml,使用zend部分/佔位符來放置我的不同模塊和控制器。 – neeraj 2012-02-09 10:51:33

+0

這是我的代碼dropdown.phtml <?php if(isset($ this-> countries)&& count($ this-> countries)> 0):?> > <?php endif; ?> – neeraj 2012-02-09 10:51:42

相關問題