1

我目前正在构建一个应用程序,我有多种方法可以访问同一个控制器。

例如:

Presenters -> 使用参数 user_type 访问控制器用户/索引:presenters
与会者 -> 访问控制器用户/索引参数 user_type :与会者

在我的导航 .ini 中,我定义了两个路径(我删除了标签、模块和 ACL 以方便阅读):

dashboard.pages.presenter.controller = "user"
dashboard.pages.presenter.action = "index"

dashboard.pages.presenter.pages.create.controller = "user"
dashboard.pages.presenter.pages.create.action = "create"

dashboard.pages.presenter.pages.edit.controller = "user"
dashboard.pages.presenter.pages.edit.action = "edit" 

dashboard.pages.attendee.controller = "user"
dashboard.pages.attendee.action = "index"

dashboard.pages.attendee.pages.create.controller = "user"
dashboard.pages.attendee.pages.create.action = "create"

dashboard.pages.attendee.pages.edit.controller = "user"
dashboard.pages.attendee.pages.edit.action = "edit"

我遇到的问题是,当我转到与会者部分时,显示的面包屑是演示者的面包屑。我知道它按预期工作,但我正在寻找一种方法来根据 URL 参数设置正确的“节点” user_type

使用这个:

$page = $this->view->navigation()->findOneByLabel($label);
if ($page) {
    $page->setActive();
}

我已经能够将页面设置为活动状态,但我正在寻找一种将Zend_Navigation状态“重置”为无的方法。

4

1 回答 1

1

只要我正确地把它放在你的引导程序中并复制我为你写的控制器插件。如果没有为视图设置导航,我还没有测试会发生什么。最好测试一下。顺便说一句,使用不同路线的相同页面在 seo 方面并不好。

引导程序:

protected function _initStackoverflow()
{
    $this->bootstrap('frontController');
    $frontController = $this->getResource( 'frontController' );
    $frontController->registerPlugin( new Altergear_Controller_Plugin_Stackoverflow() );
}

控制器插件:

<?php
class Altergear_Controller_Plugin_Stackoverflow extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch( Zend_Controller_Request_Abstract $request )
    {
        if( ( $activeLabel = $this->_request->getUserParam('active') ) !== null ){
            $view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->bootstrap('view')->getResource('view'); 
            foreach( $view->navigation()->getPages() as $page )
            {
                $page->setActive(  strtolower( $page->getLabel() ) === strtolower( $activeLabel ) );
            }
        }
    }
}
于 2011-11-13T21:51:10.217 回答