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

about/index- メニューでクラスを取得します - アクティブです。

about/graphic- メニューのクラスをアクティブにしません。

about/print- メニューのクラスをアクティブにしません。

メニューにはサブアイテムがないことに注意してください。についてのみ。

ユーザーがグラフィック、印刷物などを使用しているかどうかに関係なく、 Aboutを強調表示したいと考えています。

どうすればこれを達成できますか?

その「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ます。

強制する方法は 2 つあります。最初は'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 に答える