我目前正在构建一个应用程序,我有多种方法可以访问同一个控制器。
E.g:
Presenters -> access controller user/index with param user_type : presenters Attendees -> access controller user/index with param user_type : attendees
在我的导航.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
状态“重置”为无。
答案 0 :(得分:1)
只要我说得对,就把它放在你的Bootstrap中并复制我为你写的控制器插件。我没有测试如果没有为视图设置导航会发生什么。更好的测试。顺便说一下,使用不同路线的相同页面在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 ) );
}
}
}
}