我有以下问题,使用zend框架,特别是zend_nav创建一个可重用的菜单,通过layout / layout.phtml页面传入。这些是各自文件中的代码片段。
首先在application / configs / navigation.xml中,
<configdata>
<nav>
<label>Home</label>
<controller>index</controller>
<action>index</action>
<pages>
<add>
<label>Add</label>
<controller>post</controller>
<action>add</action>
</add>
<login>
<label>Admin</label>
<controller>login</controller>
<action>login</action>
</login>
</pages>
</nav>
</configdata>
然后将其传递到Bootstrap.php文件中的对象(仅显示该特定方法)
protected function __initNavigation(){
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
$view->navigation($container);
}
然后最后在视图layout.phtml中,对象应返回菜单
<!-- application/layouts/scripts/layout.phtml -->
<?php echo $this->doctype() ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Zend Blog !</title>
<?php echo $this->headLink()->appendStylesheet('/css/global.css')?>
</head>
<body>
<div id="header">
<div id="header-logo">
<b>Blog Me !</b>
</div>
</div>
<div id="menu">
<?php echo $this->navigation()->menu() ?>
</div>
<div id="content">
<?php echo $this->layout()->content ?>
</div>
</body>
</html>
但是,当我在浏览器中启动我的应用程序时,菜单确实没有显示,任何可能出错的想法都是谦卑地收到的。
答案 0 :(得分:1)
如果您没有故意将函数__initNavigation
命名为两个_
下划线,那么您可能希望代码自动运行。要让它自动运行,您需要使用单个下划线。
另一个可能的问题是_initNavigation
在_initView
之前运行,因为Zend按字母顺序浏览这些资源。但是,您无需在此代码中访问$view
。您可以使用Zend_Registry
存储导航容器:
protected function _initNavigation() {
$config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav');
$container = new Zend_Navigation($config);
Zend_Registry::set('Zend_Navigation', $container);
}
当没有指定容器时,任何导航助手都默认使用Zend_Navigation
注册表项。
答案 1 :(得分:1)
我认为您的代码是正确的,只是受保护的函数__initNavigation()
应该只在_
_initNavigation()
然后将__initNavigation()
更改为_initNavigation()
答案 2 :(得分:1)
我印象深刻,答案非常快,问题有几个方面,首先你们两个都正确使用一个下划线标志,非常感谢你们两个人! 事实证明,我拼错了,
$config = new Zend_Config_Xml(APPLICATION .'/config/navigation.xml', 'nav');
应该是,
$config = new Zend_Config_Xml(APPLICATION_PATH .'/configs/navigation.xml', 'nav');
我的错。最后,在nav.xml文件中,在 - 节点内部,应该有每个“页面”节点周围的节点,例如用于家庭。它应该有
<configdata>
<nav>
<home>
<label>Home</label>
<controller>index</controller>
<action>index</action>
</home>
就是这样!
再次,非常感谢您的提示和提示,我正确的方向。
Sinc Kalle Johansson