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

about/index- 我们在菜单上找到课程 - 活动。

about/graphic- 我们没有激活菜单上的课程。

about/print- 我们没有激活菜单上的课程。

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

无论用户是使用图形、打印还是其他方式,我们都希望突出显示关于

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

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

4

3 回答 3

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

添加了active参数。这行得通。

active:布尔值,可选,此菜单项是否处于活动状态(当前选中)。如果菜单项处于活动状态且 activeClass 不为空,则其 CSS 类将附加 activeClass。如果未设置此选项,则当当前请求由 url 触发时,菜单项将自动设置为活动状态。请注意,“url”选项中未指定的 GET 参数将被忽略。

我已经设置了该属性。否则它将无法正常工作。

但是,正如您在粗线中看到的那样,他们说这应该是自动触发的。不是在这个案子上。

我想是这样的,因为 Yii 期望 About 的子元素来应用该类,因为有任何,我们必须强制它来获取父元素。

不过不确定。

于 2012-09-27T14:05:06.953 回答
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)方法

于 2012-09-27T14:09:09.013 回答
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% 确定,菜单项将“坚持”活动

于 2012-09-27T19:56:03.397 回答