Zend Framework: элементы навигации остаются видимыми - PullRequest
1 голос
/ 14 июля 2011

Я не могу понять, почему это не работает.Элемент item всегда остается видимым.Я использую последнюю версию, и мое меню выглядит так:

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')
                    ),
                    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;
}

В макете:

<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>

Не думаю, что это проблема, но в любом случае вот частичное

<?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 />";
?>

Ответы [ 2 ]

1 голос
/ 15 июля 2011

Ну, конечно, это был мой частичный. Так как я не использую значения по умолчанию при рендеринге, видимость не проверяется, я думаю. Поэтому я изменил частичное, чтобы включить отсутствующий вызов метода 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>";
    }
 }
1 голос
/ 14 июля 2011

Попробуйте использовать 0 (ноль) вместо FALSE:

'visible' => 0,

Это помогло мне с использованием файла навигации XML.

...