關於YII的菜單插件 CMenu和麪包末breadcrumbs路徑管理插件的一些使用問題

在使用 YIi的路徑管理工具時,發現了一個問題。

                    <?php
                    $this->widget('zii.widgets.CMenu',array(
                        'items'=>array(
                            array('label'=>'首頁', 'url'=>array('/site/index')),
                             array('label'=>'Products', 'url'=>array('product/index'), 'items'=>array(
                                array('label'=>'New Arrivals', 'url'=>array('product/new', 'tag'=>'new')),
                               array('label'=>'Most Popular', 'url'=>array('product/index', 'tag'=>'popular')),
                             )),
                            array('label'=>'系統設置', 'url'=>array('/setting),''),
                        ),
                    ));
                    ?>

如上所示的菜單,因爲 CMENU 鏈接是模塊(modules)路徑的話,顯示出來的菜單就捕獲不到那個菜單當前是被激活的。可以通過簡單的修改插件代碼來解決這一問題:

1.打開代碼文件 : yiiframework/zii/widgets/CMenu.php

2.找到代碼第 226行,把isItemActive函數,替換爲以下代碼:

protected function isItemActive($item,$route)
{
   //原版
        //if(isset($item['url']) && is_array($item['url']) && !strcasecmp(trim($item['url'][0],'/'),$route))
        //修改版
        if(isset($item['url']) && is_array($item['url']) && strpos('/'.$route,trim($item['url'][0],'/'))>0)
   {
    if(count($item['url'])>=1)
    {
     foreach(array_splice($item['url'],1) as $name=>$value)
     {
      if(!isset($_GET[$name]) || $_GET[$name]!=$value)
       return false;
     }
    }
    return true;
   }elseif(isset($item['url']) && strlen(strstr($item['url'],$route))>0){
            return true;
        }
   return false;
}

3.原理只是修改了判斷代碼,使用strpos來判斷路由中,是否存在當前請求的模塊或控制器的路徑,從而達到獲取激活菜單項的目的。

 

================================================================

 


Yii 的Breadcrumbs,是Yii的路徑插件,使用方法 :

<?php $this->widget('zii.widgets.CBreadcrumbs', array('links'=>$this->breadcrumbs,)); ?>

在視圖裏設置路徑信息(在生成Yii程序裏,都會自動產生這些代碼,註冊掉的部分是自動生成的):

<?php
$this->breadcrumbs=array(
//$this->module->id,
    '系統設置'
);
?>

但是因爲這個東東是老外寫的,所以路徑的開頭總是以 Home 開頭,就像這樣

Home » 系統設置

通過爲CBreadcrumbs添加一個屬性,可以很簡單的解決這個問題

1. 打開代碼文件 : yiiframework/zii/widgets/CBreadcrumbs.php

2.在打開文件 的第48行下方添加代碼: public $rootName = 'Home';

3.修改第104行代碼

$links[]=CHtml::link(Yii::t('zii','Home'),Yii::app()->homeUrl);

爲: $links[]=CHtml::link(Yii::t('zii',$this->rootName),Yii::app()->homeUrl);

4.調用方法 :<?php $this->widget('zii.widgets.CBreadcrumbs', array('rootName'=>'管理系統','links'=>$this->breadcrumbs,)); ?>

原理:其實就是爲插件添加了一件屬性,來代替之前固化的開始處字符。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章