开发者

Zend Framework: Navigation items remain visible

开发者 https://www.devze.com 2023-03-20 02:46 出处:网络
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:

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>";
    }
 }
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号