让我们说,我们有:
$pages = array(
array(
'controller' => 'controller1',
'label' => 'Label1',
),
array (
'controller' => 'controller2',
'label' => 'Label2'
),
);
$container = new Zend_Navigation($pages);
当用户单击Label1时,将呈现controller1 / index操作并且Label1变为活动状态 - 一切正常。 在这个页面上我有很多链接,例如:controller1 / action1,controller1 / action2等 单击其中一个链接时,Label1将失去活动状态。
据我所知,我可以将所有子页面添加到Zend_Navigation中,但是有很多这些页面,我从不需要它在任何地方进行导航,所以,我更喜欢这样的东西:
public function init()
{
$this->view->navigation()-> ... get item by label ... -> setActive();
}
在controller1内部。有可能吗?
答案 0 :(得分:4)
您的init方法非常接近!
$page = $this->view->navigation()->findOneByLabel('Your Label'); /* @var $page Zend_Navigation_Page */
if ( $page ) {
$page->setActive();
}
答案 1 :(得分:2)
我认为这正是他所寻找的: 只需将其粘贴到menu.phtml或任何打印菜单的.phtml中:
// apply active state to all actions of controller
$controller = Zend_Controller_Front::getInstance()->getRequest()->getControllerName();
$page = $this->navigation()->findOneByController($controller); /* @var $page Zend_Navigation_Page */
if ( $page ) {
$page->setActive();
}
echo $this->navigation()->menu();
当然,您需要首先使用Zend_Navigation_Page_Mvc页面初始化导航结构。 不知何故,这对我的网页页面不起作用......