Zend_Navigation:如何将活动状态应用于控制器的所有操作?

时间:2009-12-16 14:35:45

标签: php zend-framework

让我们说,我们有:

$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内部。有可能吗?

2 个答案:

答案 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页面初始化导航结构。 不知何故,这对我的网页页面不起作用......