Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重置Zend_导航状态_Php_Zend Framework_Zend Navigation - Fatal编程技术网

Php 重置Zend_导航状态

Php 重置Zend_导航状态,php,zend-framework,zend-navigation,Php,Zend Framework,Zend Navigation,我目前正在构建一个应用程序,我可以通过多种方式访问同一个控制器 例如: 我遇到的问题是,当我进入“与会者”部分时,显示的面包屑是供演示者使用的。我知道它可以按预期工作,但我正在寻找一种方法,根据URL参数用户类型将正确的“节点”设置为活动状态 使用此选项: $page = $this->view->navigation()->findOneByLabel($label); if ($page) { $page->setActive(); } 我已经能够将页面设置

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

例如:

我遇到的问题是,当我进入“与会者”部分时,显示的面包屑是供演示者使用的。我知道它可以按预期工作,但我正在寻找一种方法,根据URL参数
用户类型
将正确的“节点”设置为活动状态

使用此选项:

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

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

只要我正确无误,请将其放入引导程序并复制我为您编写的控制器插件。我还没有测试如果没有为视图设置导航会发生什么。最好测试一下。顺便说一句,在搜索引擎优化(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 ) );
            }
        }
    }
}

只要我没弄错,就把它放到你的引导程序中,复制我为你写的控制器插件。我还没有测试如果没有为视图设置导航会发生什么。最好测试一下。顺便说一句,在搜索引擎优化(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 ) );
            }
        }
    }
}

您始终可以为与会者创建一个扩展用户的新类。你得到了所有的功能,消除了玩导航的痛苦。此外,您还可以添加更多自定义功能。您始终可以为与会者创建一个扩展用户的新类。你得到了所有的功能,消除了玩导航的痛苦。此外,您还可以添加更多自定义功能感谢SEO指针,我现在意识到了我在设计应用程序时的错误,下次我将为我的不同用户构建不同的控制器,并将我的大部分代码非本地化。另一方面,你的回答给出了与我得到的结果相同的结果,但是在插件级别,而不是在控制器内部,不要为每个用户构建控制器。使用Zend_AUth和Zend_Acl将stdClass对象设置为标识并向其附加userId。我现在就是这样工作的我要你的赏金。你问题的哪一部分还没有得到回答:D?是的,对,一开始我没有给你,因为我希望直接解决当前的编程问题,但悬赏是关于答案或另一种做事情的方式:P。在阅读你的解决方案后,我找到了一个“黑客”来做我想做的事情,但我现在遇到了另一个问题,我将重构代码以使其正常工作。非常感谢SEO的指导,我现在意识到我在设计我的应用程序时犯了错误,下次我将为我的不同用户构建一个不同的控制器,并对我的大部分代码进行非本地化。另一方面,你的回答给出了与我得到的结果相同的结果,但是在插件级别,而不是在控制器内部,不要为每个用户构建控制器。使用Zend_AUth和Zend_Acl将stdClass对象设置为标识并向其附加userId。我现在就是这样工作的我要你的赏金。你问题的哪一部分还没有得到回答:D?是的,对,一开始我没有给你,因为我希望直接解决当前的编程问题,但悬赏是关于答案或另一种做事情的方式:P。在阅读你的解决方案后,我找到了一个“黑客”来做我想做的事情,但我现在遇到了另一个问题,我将重构代码以使其正常工作。谢谢