看來你行動導航菜單其實的行爲像一個子菜單,每個動作子頁面的一部分。做這樣的事情的一個好方法是有兩個Zend_Navigation實例,例如你可以存儲在註冊表中。然後,在你的控制器,你可以調用一個動作助手在preDispatch()
方法是這樣的:
// in each controller where you want your "action navigation menu"
public function preDispatch()
{
$this->_helper->navigation()->renderActionNavigation();
}
當然,只需要這個操作的導航菜單會有這種方法的控制器。 這個動作助手將基本得到當前視圖對象,創建佔位符和渲染的部分如下:
// in your library/My/Controller/Action/Helper
class My_Controller_Action_Helper_Navigation extends Zend_Controller_Action_Helper_Abstract
{
private $_view = null;
public function direct()
{
$this->_view = $view = Zend_Layout::getMvcInstance()->getView();
$this->_view->placeholder('action-navigation');
return $this;
}
public function renderActionNavigation()
{
$this->_view->render('partials/_action-navigation.phtml');
}
}
如果你不使用庫,只需把這個代碼在/視圖/助理/並將其重命名爲Zend_View_Helper_Navigation
。
則部分將負責使用佔位符,以使您的子菜單:
// in /view/scripts/partials/_action-navigation.phtml
<?php $this->placeholder('action-navigation')->captureStart() ?>
<?php $options = array('onlyActiveBranch' => true); ?>
<?= $this->navigation()->menu()->renderMenu(Zend_Registry::get('nav.action-navigation'), $options);
// here I assume that you've stored your Navigation container in the registry ?>
<?php $this->placeholder('action-navigation')->captureEnd() ?>
此外,渲染使用navigation view helper method renderMenu()
一個選項onlyActiveBranch
設置你的菜單true
將讓你到只呈現活躍分支,其中每個分支對應您的控制器。
最後,在你的佈局你會這樣:
// in your layout file (usually named layout.phtml)
<?= $this->placeholder('action-navigation'); ?>
如果您選擇在註冊表中註冊Zend_Navigation容器,這可以在引導做這樣:
// in your bootstrap.php
protected function _initNavigation()
{
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
Zend_Registry::set('nav.action-navigation', $container);
}
有關集裝箱的更多信息,請致電refer to this page。另外,如果您對佔位符不熟悉,請撥打here is a good practical example以瞭解如何使用它們。
我是新來的zend框架。而你的解釋似乎對我來說有點過頭。我仍然掌握助手或導航的概念,以及它如何在zend中處理。你能否向我解釋一下代碼中發生了什麼和所有事情。它屬於哪裏 – 2012-04-08 15:48:22
剛剛編輯我的答案,並在每個片段添加評論。從Zend文檔中,[Action Helpers](http://framework.zend.com/manual/en/zend.controller.actionhelpers.html#zend.controller.actionhelper.writingyourown)允許開發人員注入運行時和/將需求功能添加到擴展了'Zend_Controller_Action'的任何Action控制器中。 **動作助手**旨在最大限度地減少擴展抽象動作控制器以注入通用動作控制器功能的必要性。 – Liyali 2012-04-08 17:12:08
我很感謝你的幫助。但是你認爲我可以在不使用Zend_Navigation的情況下實現同樣的效果嗎? Zend_Navigation有什麼困擾我是自定義裝飾器,我仍然無法得到它。如何使用視圖助手出於同樣的目的? – 2012-04-10 14:06:43