在Zend_Navigation_Container页面上使用findAll方法时,正在从容器对象中删除它们。
同样的事情发生了,即使我克隆容器对象并且在这个克隆的对象上调用了findAll。
我无法想象它是如何发生的。
但是,我注意到只有当我试图在第二层(或更深层)“找到”页面时才会发生这种情况
Same problem seems to be described here, no answer was given...
以下是一些重现问题的代码:
<?php
$container = new Zend_Navigation(array(
array(
'label' => 'Page 1',
'route' => 'default',
'pages' => array(
array(
'label' => 'Page 1.1',
'route' => 'default',
),
)
),
array(
'label' => 'Page 2',
'route' => 'default',
),
array(
'label' => 'Page 3',
'route' => 'default',
)
));
echo $this->navigation($container)->menu()->renderMenu($container);
echo '<br /><hr /><br />';
echo $this->navigation($container)->menu()->renderMenu(new Zend_Navigation($container->findAllByLabel('Page 2')));
echo '<br /><hr /><br />';
echo $this->navigation($container)->menu()->renderMenu($container);
?>
<?php
$container = new Zend_Navigation(array(
array(
'label' => 'Page 1',
'route' => 'default',
'pages' => array(
array(
'label' => 'Page 1.1',
'route' => 'default',
),
)
),
array(
'label' => 'Page 2',
'route' => 'default',
),
array(
'label' => 'Page 3',
'route' => 'default',
)
));
$container1 = clone $container;
$container2 = clone $container;
$container3 = clone $container;
echo $this->navigation($container1)->menu()->renderMenu($container1);
echo '<br /><hr /><br />';
echo $this->navigation($container2)->menu()->renderMenu(new Zend_Navigation($container2->findAllByLabel('Page 1.1')));
echo '<br /><hr /><br />';
echo $this->navigation($container3)->menu()->renderMenu($container3);
?>
与上面相同的代码,只有'Page 2'代替'Page 1.1'
有人可以告诉我这里发生了什么吗?
我想要实现的目标是在两个不同的地方显示相同的菜单。在这两个地方,菜单都是从容器页面的一部分构建的,用findXXX方法过滤......
但是有了描述的问题,似乎是不可能的:(
提前感谢任何建议。
答案 0 :(得分:1)
试试这个,你走在正确的轨道上,我只是认为你在Zend_Navigation和navigation()视图帮助器之间存在差异。
<?php
//instantiate Zend_navigation object... This also registers this container to the view helper
$container = new Zend_Navigation(array(
array(
'label' => 'Page 1',
'route' => 'default',
'pages' => array(
array(
'label' => 'Page 1.1',
'route' => 'default',
),
)
),
array(
'label' => 'Page 2',
'route' => 'default',
),
array(
'label' => 'Page 3',
'route' => 'default',
)
));
//now we use the view helper
echo $this->navigation()->menu()->renderMenu($container);
echo '<br /><hr /><br />';
$label = $this->navigation()->findAllByLabel('Page 2');
echo $this->navigation()->menu()->renderMenu($label);
echo '<br /><hr /><br />';
echo $this->navigation()->menu()->renderMenu($container);
?>
我个人喜欢在bootstrap中设置导航并使用配置文件来制作容器。
protected function _initNavigation() {
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/site.xml');
$container = new Zend_Navigation($config);
$registry = Zend_Registry::getInstance();
$registry->set('Zend_Navigation', $container);
}
希望这会有所帮助:)