2012-09-27 76 views
1
'items'=>array(
    array(
     'label'=>'About', 
     'url'=>array('about/index') 
), 

about/index - 我們在菜單上得到這個班級 - 活動的。CMenu - 活動班級不渲染

about/graphic - 我們沒有得到活動菜單上的課程。

about/print - 我們沒有在菜單上激活課程。

請注意菜單中沒有子項目。 只有關於。

不管用戶是在圖形,打印還是其他方面,我們都希望關於突出顯示。

我們該如何做到這一點?

我試着編輯'url'參數很多。沒有運氣。

回答

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

增加了active參數。這工作。

active:boolean,可選,該菜單項是否處於活動狀態 (當前選定)。如果菜單項處於活動狀態且activeClass不爲 爲空,則其CSS類將附加上activeClass。 如果未設置此選項 ,則當url觸發 當前請求時,菜單項將自動激活。請注意,未在'url'選項中指定的GET參數 將被忽略。

我已經設置了該屬性。否則它不會工作。

但是,正如你所看到的粗線,他們說這應該被自動觸發。這不是這種情況。

我想這是事實,因爲Yii期待關於這個類的一個子元素,因爲有任何我們必須強制它來取代父類。

但是不確定。

+0

你可以轉儲$這個 - 內容>路線,你會看到,$路由比的不同約/索引」。這就是爲什麼菜單項不會自動激活... –

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)方法

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', 

注:

  • 添加$控制器或$操作變量,你可以將它們用於更多的菜單項。你的代碼會更乾淨。

  • 你就可以100%肯定的是,菜單項將「堅持」主動