ZF:ZEND_NAVIGATION_PAGE - 页面未获得活动状态

ZF:ZEND_NAVIGATION_PAGE  - 页面未获得活动状态

问题描述:

I have generated menu with pages like that:

$pageSettings = array(
                    'route'      => 'catalog',
                    'label'      => $element->getName(),
                    'module'     => 'default',
                    'controller' => 'catalog',
                    'action'     => 'index',
                    'params'     => array('cat' => $element->getUrl()),
                    'order'      => $element->getOrder(),
                    'id'         => 'catalogID_' . $element->getId(),
);

$contentMenuTree->addPage($pageSettings);

Where $contentMenuTree is a Zend_Navigation instance.

And have a route in a bootstrap:

$router->addRoutes(array(            
    'catalog'  => new Zend_Controller_Router_Route('/catalog/:cat', array('module' => 'default', 'controller' => 'catalog', 'index' => 'index', 'cat' => null))
));

If I call site.ru/catalog/test then there are nothing active page in $contentMenuTree.

So I found patch for it but it doesn't seem correct:

$front = Zend_Controller_Front::getInstance();
$action = $front->getRequest()->getActionName();
$cat    = $front->getRequest()->getParam('cat');
$module = $front->getRequest()->getModuleName();
$controller = $front->getRequest()->getControllerName();

if ($controller == 'catalog' && $module == 'default' 
             && $action == 'index' && $cat==$element->getUrl())
                        $pageSettings['active'] = true;

Why zend_navigation doesn't get active page element automatically?

我生成了包含以下页面的菜单: p>

  $  pageSettings = array(
'route'=>'catalog',
'label'=> $ element-> getName(),
'module'=>'default',
'controller'  =>'catalog',
'action'=>'index',
'params'=> array('cat'=> $ element-> getUrl()),
'order'  => $ element-> getOrder(),
'id'=>'catalogID_'。$ element-> getId(),
); 
 
 $ contentMenuTree-> addPage($ pageSettings  ); 
  code>  pre> 
 
 

其中 $ contentMenuTree code>是一个Zend_Navigation实例。 p>

并且有一个路由 引导程序: p>

  $ router-> addRoutes(array(
'stalog'=> new Zend_Controller_Router_Route('/ catalog /:cat',array('module')  =>'默认','控制器'=>'目录',  'index'=>  'index','cat'=>  null))
)); 
  code>  pre> 
 
 

如果我调用site.ru/catalog/test,那么$ contentMenuTree中没有任何活动页面。 p> \ n

所以我找到了它的补丁,但它似乎不正确: p>

  $ front = Zend_Controller_Front :: getInstance(); 
 $ action = $  front-> getRequest() - > getActionName(); 
 $ cat = $ front-> getRequest() - > getParam('cat'); 
 $ module = $ front-> getRequest()  - > getModuleName(); 
 $ controller = $ front-> getRequest() - > getControllerName(); 
 
if($ controller =='catalog'&& $ module =='default'  
&& $ action =='index'&& $ cat == $ element-> getUrl())
 $ pageSettings ['active'] = true; 
  code>   pre> 
 
 

为什么zend_navigation不会自动获取活动页面元素? p> div>

you don't have action in your router

i think it should be

$router->addRoutes(array(            
    'catalog'  => new Zend_Controller_Router_Route('/catalog/:cat', 
     array('module' => 'default', 
           'controller' => 'catalog', 
           'action' => 'index',
           'cat' => null))
));