我正在尝试在我的应用程序中进行面包屑渲染(它们不会显示在任何地方,甚至没有显示主页,它有相应的Zend Page Uri对象),它有多个导航区域 - 主要和实用程序。对于菜单生成,我有一个MenuController,我在布局中使用:
进行渲染$this->layout()->utility = $this->action('render', 'menu', null, array('menu' => $this->utilityId));
$this->layout()->nav = $this->action('render', 'menu', null, array('menu' => $this->mainMenuId));
utilityId
和mainMenuId
属性是数字,从数据库中抓取。
Menu控件的render方法只是构建一个数组并创建一个Zend Navigation对象,然后调用setContainer并将其设置为该容器。这是伪代码,因为它相当长:
// MenuController.php
private function renderAction() {
$itemArray[] = array('label' => $label, 'uri' => $uri ); // in a loop
$container = new Zend_Navigation($itemArray);
if ( $container instanceof Zend_Navigation_Container ) {
$this->view->navigation()->setContainer( $container );
$uri = $this->_request->getPathInfo();
$item = $this->view->navigation()->findByUri($uri);
$item->active = true;
}
}
因此,此实现方法在实用程序和导航的布局中被调用两次。
修改 我认为问题是我需要指定$ container所以我的代码将是
$this->navigation($container)->breadcrumbs();
但是因为我正在使用$this->action('render', 'menu' )
$container
变量设置在那里而没有返回,有没有办法可以用其他方式指定容器?可能使用$this->layout()->nav
和指向容器的属性。
This看起来是同一个问题,有人建议使用Zend_Registry
设置/获取它们,也许我会尝试一下。
答案 0 :(得分:1)
我怀疑您没有导航层次结构。您需要页面内的页面。
e.g。
Home Page
[pages] => Sign In
[pages] => Forgot Password
=> Create Account
[pages] => Confirm Account Email
=> Email Confirmed
使用上述内容,面包屑将在除主页之外的所有活动页面上呈现...如果您这样做,所有页面都会显示:
$this->navigation()->breadcrumbs()->setMinDepth(0); // don't skip the root page
或者也许是别的,但很难说。不过我希望有所帮助!
答案 1 :(得分:0)
这可能是一个肮脏的解决方案,但我使用Zend_Registry手动设置容器引用,如下所示:
Zend_Registry::set( 'nav' . $menu, $container );
并吐出来:
$main = Zend_Registry::get( 'nav' . $this->mainMenuId );
echo $this->navigation( $main )->breadcrumbs()->setMinDepth(0);
答案 2 :(得分:0)
这可能不是您需要的全部答案,但它可以让您更进一步。
请参阅:this answer