CMenu - 活动类不呈现

时间:2012-09-27 13:35:13

标签: yii

'items'=>array(
     array(
         'label'=>'About',
         'url'=>array('about/index')
),

about/index - 我们在菜单上获得了课程 - 活跃。

about/graphic - 我们不会让菜单上的课程处于活动状态。

about/print - 我们不会让菜单上的课程处于活动状态。

请注意,菜单没有子项。 只有。

如果用户使用的是图形,打印或其他任何内容,我们希望突出显示关于

我们怎样才能做到这一点?

我试图编辑那个'url'参数。没有运气。

3 个答案:

答案 0 :(得分:4)

'items'=>array(
     array(
         'label'=>'About',
         'url'=>array('about/index'),
         'active'=>Yii::app()->controller->id=='about',
),

添加了active参数。这很有用。

  

active:boolean,optional,此菜单项是否处于活动状态   (目前已选中)。如果菜单项处于活动状态而activeClass未处于活动状态   为空,其CSS类将附加activeClass。 如果有此选项   未设置,菜单项将自动设置为活动时   当前请求由url触发。请注意GET参数   “url”选项中未指定的内容将被忽略。

我已经设置了该属性。否则它将无效。

但是,正如您在粗线上看到的那样,他们说这应该是自动触发的。这不是在这种情况下。

我认为情况就是这样,因为Yii正在期待一个子元素,以便应用该类,因为有任何,我们必须强制它,以取代父母。

但不确定。

答案 1 :(得分:1)

CMenu正在将项目的路线与当前路线进行比较,因此默认情况下它仅适用于about/index

我看到两种强制方式 - 首先只是在项目列表中设置'active' => true

$isActive = strpos(Yii::app()->controller->route, 'about/') === 0;
// ....
'items'=>array(
     array(
         'label'=>'About',
         'url'=>array('about/index'),
         'active' => $isActive
 ),

或者您可以继承CMenu类并覆盖CMenu::isItemActive($item,$route)方法

答案 2 :(得分:0)

简单但有效:

$action = Yii::app()->controller->action->id; // this is the action name currently running
'items'=>array(
     array(
         'label'=>'About',
         'url'=>'/about/something',
         'active'=>$action == 'something',
),

...也 激活菜单,无论操作如何,仅适用于控制器:

$controller = Yii::app()->controller->id; // this is the controller name
...
'active'=>$controller == 'something',

注意:

  • 添加$ controller或$ action变量,您可以将它们用于更多菜单项。您的代码将更清晰。

  • 您将100%确定,菜单项将“坚持”活跃