ZF2 - активный ‹li› в меню навигации Zend

Мне удалось создать меню с помощью Zend Navigation. Однако активная страница никогда не устанавливается (класс active не устанавливается ни для одного элемента <li>).

Моя часть:

foreach ($pages as $page): ?>

<?php if (!$page->isVisible() || !$this->navigation()->menu()->accept($page)) continue; ?>

<li role="presentation" <?php if ($page->isActive()) echo 'class="active"' ?>>
    <a href="<?php echo $page->getHref() ?>">
        <?php if ($icon = $page->get('icon')) {
            echo '<span class="' . $icon . '"></span>';
        } ?>
        <span> <?php echo $this->translate($page->getLabel()) ?> </span>
    </a>
</li>

<?php endforeach ?>

Выдержка из module.config.php:

    'navigation' => array(
        'default' => array(
            array(
                'label' => 'Page 1',
                'route' => 'application/default',
                'namespace' => 'Application\Controller',
                'controller' => 'Index',
                'action' => 'page1',
                'icon' => 'fa fa-2x fa-file-text',
                'order' => 10,
            ),
            array(
                'label' => 'Page 2',
                'route' => 'application/default',
                'namespace' => 'Application\Controller',
                'controller' => 'Index',
                'action' => 'page2',
                'icon' => 'fa fa-2x fa-file-text',
                'order' => 20,
            ),
        ),
    ),

Меню правильно отображается на странице, но без активного класса:

    $partial = array('partial/menu.phtml', 'default');
    echo $this->navigation('navigation')
        ->menu()
        ->setMinDepth(0)
        ->setMaxDepth(0)
        ->setPartial($partial);

После некоторого исследования кода ZF я нашел кое-что, чего не понимаю (в Zend\View\Helper\Navigation\Menu.php):

// in renderNormalMenu function, line 288     
$isActive = $page->isActive(true);

Любая идея или предложение относительно моей проблемы?

Большое спасибо,


person DavidL    schedule 15.04.2016    source источник
comment
Не могли бы вы в целях отладки добавить echo get_class($page) внутри цикла рендеринга и указать, к какому классу относятся эти page экземпляры?   -  person Fge    schedule 16.04.2016
comment
$page является экземпляром Zend\Navigation\Page\Mvc   -  person DavidL    schedule 18.04.2016


Ответы (1)


Проблема была в module.config.php ; метод isActive (из Zend\Navigation\Mvc) ожидал "полное" имя контроллера (включая пространство имен).

Моя конфигурация разделяла пространство имен и имя контроллера, что вызывало проблему.

Решение:

            array(
                'label' => 'Page 1',
                'route' => 'application/default',
                'controller' => 'Application\Controller\Index',
                'action' => 'page1',
                'icon' => 'fa fa-2x fa-file-text',
                'order' => 10,
            ),
person DavidL    schedule 18.04.2016