Php Zend菜单扩展
我在一个有“普通”菜单和子菜单的网站上工作 这是引导程序中用于导航的方法: Bootstrap.phpPhp Zend菜单扩展,php,zend-framework,navigation,zend-view,zend-navigation,Php,Zend Framework,Navigation,Zend View,Zend Navigation,我在一个有“普通”菜单和子菜单的网站上工作 这是引导程序中用于导航的方法: Bootstrap.php protected function _initNavigation() { $view = $this->getResource('view'); $view->addHelperPath(APPLICATION_ROOT . '/library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_');
protected function _initNavigation()
{
$view = $this->getResource('view');
$view->addHelperPath(APPLICATION_ROOT . '/library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_');
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navigation = new Zend_Navigation($config);
$view->navigation($navigation);
$menuPartial = array('menu.phtml', 'default');
$view->navigation()->menu()->setPartial($menuPartial);
$subMenuPartial = array('submenu.phtml', 'default');
$view->navigation()->subMenu()->setPartial($subMenuPartial);
}
class Pcw_View_Helper_Navigation_SubMenu extends Zend_View_Helper_Navigation_Menu
{
public function subMenu(Zend_Navigation_Container $container = null)
{
return parent::menu($container);
}
}
library/Pcw/View/Helper/Navigation/SubMenu.php
protected function _initNavigation()
{
$view = $this->getResource('view');
$view->addHelperPath(APPLICATION_ROOT . '/library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_');
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'nav');
$navigation = new Zend_Navigation($config);
$view->navigation($navigation);
$menuPartial = array('menu.phtml', 'default');
$view->navigation()->menu()->setPartial($menuPartial);
$subMenuPartial = array('submenu.phtml', 'default');
$view->navigation()->subMenu()->setPartial($subMenuPartial);
}
class Pcw_View_Helper_Navigation_SubMenu extends Zend_View_Helper_Navigation_Menu
{
public function subMenu(Zend_Navigation_Container $container = null)
{
return parent::menu($container);
}
}
根据Stackoverflow上的文档和主题,此构造应该可以工作,但出现以下错误:
Fatal error: Uncaught exception 'Zend_Navigation_Exception' with message 'Bad method call: Unknown method Zend_Navigation::subMenu' in /home/prj/domains/prjon.nl/library/Zend/Navigation/Container.php:366
Stack trace:
#0 [internal function]: Zend_Navigation_Container->__call('subMenu', Array)
#1 [internal function]: Zend_Navigation->subMenu()
#2 /home/prj/domains/prjon.nl/library/Zend/View/Helper/Navigation/HelperAbstract.php(503): call_user_func_array(Array, Array)
#3 /home/prj/domains/prjon.nl/library/Zend/View/Helper/Navigation.php(132): Zend_View_Helper_Navigation_HelperAbstract->__call('subMenu', Array)
#4 /home/prj/domains/prjon.nl/Application/Bootstrap.php(410): Zend_View_Helper_Navigation->__call('subMenu', Array)
#5 /home/prj/domains/prjon.nl/Application/Bootstrap.php(410): Zend_View_Helper_Navigation->subMenu()
#6 /home/prj/domains/prjon.nl/library/Zend/Application/Bootstrap/BootstrapAbstract.php(669): Bootstrap->_initNavigation() in /home/prj/domains/prjon.nl/library/Zend/Navigation/Container.php on line 366
错误很明显:无法找到并调用方法子菜单,但我已经创建了负责处理子菜单的帮助器
有人知道我做错了什么吗
提前谢谢 我只是使用了不同的路径语法,它适用于我的视图帮助程序,addHelper()应该适用于导航帮助程序
$view->addHelperPath(APPLICATION_ROOT . '/library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_');
改为:
$view->addHelperPath('/../library/Pcw/View/Helper/Navigation', 'Pcw_View_Helper_');
对我有用,希望对你也有用。我就是这样做的,希望有意义。我省略了ACL和Auth集成(这是一个很好的特性) 假设我想要一个带有“主页”和“管理员”的顶部菜单,以及一个位于“管理员”部分的子菜单 在我的引导程序中:
protected function _initNavigation()
{
$container = new Zend_Navigation();
// or in xml etc
$pages = array(
array('label' => 'Home', 'controller' => 'index', 'action' => 'index'),
array('label' => "Admin", 'controller' => 'admin', 'id' => 'admin', 'pages' => array(
array('label' => "Add an account", 'controller' => 'admin', 'action' => 'createuser'),
array('label' => "Clear cache", 'controller' => 'admin', 'action' => 'clearcache')
)
)
);
$container->addPages($pages);
Zend_Registry::set('Zend_Navigation', $container);
return $container;
}
然后在我的布局中显示主菜单:
$container = Zend_Registry::get('Zend_Navigation');
$this->navigation()->menu()->renderMenu($container,array('minDepth' => 0, 'maxDepth' => 0))
(检查文档中的所有renderMenu选项,非常灵活。您可以使用“maxDepth”=>1的管理子菜单轻松进行滚动)
然后在我的管理模板中,显示子菜单:
$container = Zend_Registry::get('Zend_Navigation');
$found = $container->findById('admin');
echo $this->navigation()->menu()->renderMenu($found,array('minDepth' => 0))
这样,视图呈现与引导分离,我不需要部分或自定义视图帮助程序。插件文件(ROOT/Application/subnumuplugin.php)中的我的代码:
位置子菜单:根/应用程序/视图/脚本/子菜单/
位置子菜单视图帮助程序:ROOT/library/Pcw/view/helper/submenu.php
这对你有帮助吗?真奇怪。。你的解决方案对我不起作用。。。我已经通过在第一行添加一个骰子来测试文件是否被包括在内,这是有效的。。Pcw\u View\u Helper\u Navigation\u子菜单的构造函数没有被调用..不幸的是,这不是我想要的。。我真的希望有一个单独的函数,有自己的部分。。发帖中的解决方案帮了我的忙。