[见最后的更新]
我正在使用Zend框架,在PHP中我和Zend Navigation有一些困难。这是我的第一个问题,所以如果有问题,请告诉我,我会纠正它。
我的应用程序中有一个看起来像这样的菜单
Home
Login
Logout
Member's Page
我有一个包含我的菜单的导航xml文件。
<nav>
<home>
<label>Home</label>
<uri>/</uri>
</home>
<login>
<label>Login</label>
<uri>/index/login</uri>
</login>
<logout>
<label>Logout</label>
<uri>/index/logout</uri>
</logout>
<member>
<label>Member's Page</label>
<uri>/index/member</uri>
</member>
</nav>
还包含此
的menu.phtml<div class="top-level">
<?php
foreach ($this->container as $page) {
if ($page->isVisible()) {
if ($page->isActive(true)) {
if ($page->isActive(false)
)$page->setClass("active");
else
$page->setClass("open");
echo $this->navigation()->menu()->htmlify($page);
//... the same continue for the 3 menu level
最后,在我的layout.phtml中,我有这个来呈现菜单
<?php
$partial = array('menu.phtml', 'default');
$this->navigation()->menu()->setPartial($partial);
echo $this->navigation()->menu()->render();
?>
目前,我的菜单运行良好,但我的菜单中始终无法显示登录和注销。所以,我需要做的是在我登录时隐藏登录,并在我退出时隐藏登出。我开始时看起来很简单,它仍然可以,但我不能让它工作。我不知道如何以及是否可以根据已登录的用户隐藏和显示项目。我真的需要让它工作,因为我将来需要隐藏/显示其他项目。
有没有办法做到这一点?
谢谢!
编辑:
我目前没有使用Zend :: Auth或Zend_ACL进行角色和授权。如果我想知道用户是否登录,我在会话中有一个只有在用户登录时才有效的令牌。我希望我的菜单能够在不改变的情况下工作。
更新:
我的工作方式与建议的方式不同。我真的不确定它是一种干净的方式,但它现在正在做这项工作。所以现在,我的xml导航文件看起来像
<menuAnonymous>
<home>
<label>Login</label>
<uri>/login</uri>
</home>
</menuAnonymous>
<menuLogged>
<home>
<label>Logout</label>
<uri>/Logout</uri>
</home>
</menuLogged>
我在这样的bootstrap中初始化两者。
$config = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml', 'menuNotLogged');
$container = new Zend_Navigation($config);
Zend_Registry::set('main',$container);
然后,在我的布局中,我会查看我的令牌并根据其显示菜单。
if ($tokenValid) {
echo $this->navigation()->menu()->render(Zend_Registry::get('main'));
} else {
echo $this->navigation()->menu()->render(Zend_Registry::get('logged'));
}
所以它现在就像我想要的那样,但是我仍然想要做得更清洁,所以如果你有任何建议可以帮助我......谢谢!
答案 0 :(得分:1)
您应该查看http://www.zend.com/en/resources/webinars/framework上的“利用Zend_Navigator”网络研讨会。它解释了如何将导航绑定到特定角色/ ACL。
答案 1 :(得分:1)
我用我使用的解决方案更新了我的问题,也许我会找到一个更好的方法,以后再做,但现在就是这样。我没有在这里找到解决方案,这就是我回答自己问题的原因。谢谢你的帮助!