Zend Framework: Navigation items remain visible
I can't figure out why this is not working. The item element always remains visible. I am using the latest release and my menu looks like:
public function hook_menu()
{
$menu['menuPageController'] = array(
array(
'label' => 'Start',
'controller' => 'page',
'action' => 'index'
),
array(
'label' => 'Produkter',
'controller' => 'page',
'action' => 'products',
'class' => 'beyond',
'pages' => array(
array(
'label' => 'default list a',
'controller' => 'page',
'action' => 'products',
'class' => 'beyond',
'params' => array(
'lista' => 'a开发者_StackOverflow中文版')
),
array(
'label' => 'list b',
'controller' => 'page',
'action' => 'products',
'class' => 'beyond',
'params' => array(
'listb' => 'b')
),
array(
'label' => 'list c',
'controller' => 'page',
'action' => 'products',
'class' => 'beyond',
'params' => array(
'listc' => 'c')
),
)
),
array(
'label' => 'item',
'controller' => 'page',
'action' => 'product',
'visible' => false,
'params' => array(
'id' => null)
),
array(
'label' => 'Filhanteraren',
'controller' => 'page',
'action' => 'filemanager'
)
);
return $menu;
}
In the layout:
<div id="navigation-bar">
<?php
// menu.phtml is partial, cms is module
$partial = 'partials/main-menu.phtml';
$this->navigation()->menu()->setPartial($partial);
$this->navigation()->menu()->setRenderInvisible(false);
echo $this->navigation()->menu()->render(); ?>
</div>
I don't think it's the problem but here's the partial anyway
<?php
// -- main-menu.phtml
$html = array();
$html[] = '<ul class="navigation">';
foreach (Zend_Registry::get('main') as $page)
{
$check = $page->isActive();
if($check)
{
$marker = "active";
}
else
{
$marker = "inactive";
}
$html[] = '<li class="' . $marker . '">';
$html[] = $this->menu()->htmlify($page) . PHP_EOL;
$html[] = "</li>";
}
$html[] = "</ul>";
print ('<div id="main-menu">' . join(PHP_EOL, $html) . '</div>');
// get the page asked for
$uri = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri();
$con = Zend_Controller_Front::getInstance()->getRequest()->getControllerName();
$act = Zend_Controller_Front::getInstance()->getRequest()->getActionName();
// check for child pages
$list = Zend_Registry::get('main');
$menuItems = $list->toArray();
$function = new AppFiles_Functions_FunctionsHooks();
$current = $list->findOneBy('action', $act);
$isChildof = $function->find_parent($menuItems, $act);
print($isChildof);
$subhtml = '<ul class="navigation">';
foreach ($current->pages as $subpage)
{
$check = $subpage->isActive();
if($check)
{
$submarker = "active";
}
else
{
$submarker = "inactive";
}
$subhtml .= '<li class="' . $submarker . '">';
if ($href = $subpage->getHref()) $subhtml .= "<a href=\"{$href}\">";
else $subhtml .= "<span>";
$subhtml .= $subpage->getLabel();
if ($href) $subhtml .= "</a>";
else $subhtml .= "</span>";
$subhtml .= "</li>";
$subitem[$subpage->getHref()] = '';
}
$subhtml .= "</ul>";
// print a container for the child pages
?>
<div id="sub-menu" class="">
<?php echo $subhtml; ?>
</div>
<?php
print($uri);
print "\n<br />";
print($con);
print "\n<br />";
print($act);
print "\n<br />";
?>
Try using 0 (zero) instead of FALSE:
'visible' => 0,
That did the trick for me using a XML navigation file.
Well of course it was my partial. Since I am not using the defaults in rendering the visibility is not checked I guess. So I changed the partial to include the missing method call to isVisible().
foreach (Zend_Registry::get('main') as $page)
{
$check = $page->isActive();
if($check)
{
$marker = "active";
}
else
{
$marker = "inactive";
}
if($page->isVisible())
{
$html[] = '<li class="' . $marker . '">';
$html[] = $this->menu()->htmlify($page) . PHP_EOL;
$html[] = "</li>";
}
}
精彩评论