[см. Обновление в конце]
Я работаю с Zend Framework, в 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>
Я инициализирую оба в моей начальной загрузке вот так.
$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'));
}
Так что теперь это работает так, как я хочу, но я все еще хочу сделать это чище, так что если у вас есть какие-либо предложения, чтобы помочь мне ... спасибо!