Zend_Navigation isActive не работи

Имам следния код:

<ul class="navigation">
    <?php foreach( $this->navigation as $item ): ?>
    <li class="<?php if($item->isActive()){echo " active";}?>">
            <div class="shadow"></div>
            <div class="tab"><?php echo $this->htmlLink($item->getHref(), $this->translate($item->getLabel())) ?></div>

      </li>
    <?php endforeach; ?>
</ul>

$item->isActive() работи по предназначение само за началната страница. на всички други страници class="active" не се показва.

АКТУАЛИЗАЦИЯ:

Приложението използва маршрут като следния:

// Routes --------------------------------------------------------------------
  'routes' => array(
    'home' => array(
      'route' => '/',
      'defaults' => array(
        'module' => 'core',
        'controller' => 'index',
        'action' => 'index'
      )
    ),
    'core_home' => array(
      'route' => '/',
      'defaults' => array(
        'module' => 'core',
        'controller' => 'index',
        'action' => 'index'
      )
    ),
    'confirm' => array(
      'route'=>'/confirm',
      'defaults' => array(
        'module'=>'core',
        'controller'=>'confirm',
        'action'=>'confirm'
      )
    ),

    // Admin - General
    'core_admin_settings' => array(
      'route' => "admin/core/settings/:action/*",
      'defaults' => array(
        'module' => 'core',
        'controller' => 'admin-settings',
        'action' => 'index'
      ),
      'reqs' => array(
        'action' => '\D+',
      )
    ),
  )

маршрутите се записват във файл, наречен manifest.php


person Samuel    schedule 16.06.2011    source източник
comment
вероятно нещо с вашите навигационни елементи или вашия рутер (ако имате такъв) дайте пример за вашите навигационни елементи, активните елементи изискват много неща, за да бъдат настроени правилно   -  person venimus    schedule 16.06.2011


Отговори (2)


Ако използвате потребителски маршрути, докато създавате своите Zend_Navigation_Page_Mvc обекти, трябва изрично да зададете Module, Controller и Action.

Вижте Документацията за Zend_Navigation под Пример #4 Използване на маршрути :

Забележка: Обърнете внимание, че когато използвате свойството route в страница, трябва също да укажете параметрите по подразбиране, които маршрутът дефинира (модул, контролер, действие и т.н.), в противен случай методът isActive() няма да да можете да определите дали страницата е активна.

Ако не използвате Routes, моля, предоставете малко повече информация за вашия код.


Относно вашата актуализация:

Вашите Zend_Navigations трябва да изглеждат по следния начин

new Zend_Navigation(array(
    array(
        'label'     => 'Home',
        'module'    => 'core',
        'controller'=> 'index',
        'action'    => 'index',
        'route'     => 'core'
    ),
    array(
        'label'     => 'Admin Settings',
        'module'    => 'core',
        'controller'=> 'admin-settings',
        'action'    => 'index',
        'route'     => 'core_admin_settings'
    ),
    array(
        'label'     => 'User Administration',
        'module'    => 'core',
        'controller'=> 'admin-settings',
        'action'    => 'users',
        'route'     => 'core_admin_settings'
    ),
));

След това методът isActive() трябва да работи според очакванията.

person Matthias Bayer    schedule 16.06.2011
comment
Как да посоча параметрите по подразбиране? Приложенията имат много модули, всички със собствени маршрути и можем да добавим в главното меню всеки от тези модули. - person Samuel; 17.06.2011
comment
Пример номер 4 не ми помага наистина, защото от това, което добавих по-горе, всеки модул има своя маршрутен масив в manifest.php и не виждам как да го накарам да работи според пример номер 4. - person Samuel; 17.06.2011
comment
Имате два варианта. Първо, просто погледнете вашите маршрути и копирайте стойностите на модул, контролер и действие. Или вземете копие на вашия рутер и вземете тази информация от там (_getRoute_()), ако знаете името на маршрута. - person Matthias Bayer; 17.06.2011

Ако не сте посочили модул, контролер и променлива за действие, не можете да използвате метода isActive() за съжаление

person Dmitry Z.    schedule 16.06.2011