Zend_Navigation isActive无效

时间:2011-06-16 13:58:07

标签: zend-framework zend-navigation socialengine

我有以下代码:

<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

的文件中

2 个答案:

答案 0 :(得分:1)

如果您在创建 Zend_Navigation_Page_Mvc 对象时使用自定义路线,则必须明确设置模块,控制器和操作。

请参阅示例#4使用路径下的Zend_Navigation Documentation

  

注意:请注意,在页面中使用route属性时,还应指定路径定义的默认参数(模块,控制器,操作等),否则isActive()方法将无法确定页面是否处于活动状态。

如果您不使用路线,请提供有关您的准则的更多信息。


关于您的更新:

您的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()方法应该像预期的那样工作。

答案 1 :(得分:0)

如果你没有指定模块,控制器和动作变量,你不能不熟练地使用isActive()方法