真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Yii2——實(shí)現(xiàn)自己的iCheck資源包

1.1.1 基本封裝

iCheck是配合bootstrap包使用的前端控件,用來(lái)美化radio和checkbox的顯示樣式的,根據(jù)前面的“資源管理”的說(shuō)明,以及官網(wǎng)的文檔,可以很方便的把iCheck組件用資源包封裝起來(lái),順便熟悉一下Yii 2中資源包的使用方法:

站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到吉林網(wǎng)站設(shè)計(jì)與吉林網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋吉林地區(qū)。

1、創(chuàng)建iCheck資源包ICheckAssets.php;

 
 
namespacebackend\assets;
 
 useyii\web\AssetBundle;
 
 classICheckAssetextendsAssetBundle
{
}

 

2、設(shè)置資源路徑,這里省事,直接將icheck包放到%yii-app%\backend\web\front-lib目錄下:

 
 
namespacebackend\assets;
 
 useyii\web\AssetBundle;
 
 classICheckAssetextendsAssetBundle
{
   public$basePath='@webroot';
    public$baseUrl='@web';
    public$css= [
       'front-lib/icheck/skins/all.css',
   ];
    public$js= [
       'front-lib/icheck/icheck.min.js',
   ];
 }

 

注:iCheck支持skin,這里暫時(shí)先把所有skin全部引入。

3、設(shè)置依賴包,iCheck依賴于bootstrap,同時(shí)初始化代碼依賴于jQuery,所以要將這兩個(gè)配置上:

 
 
namespacebackend\assets;
 
 useyii\web\AssetBundle;
 
 classICheckAssetextendsAssetBundle
{
   public$basePath='@webroot';
    public$baseUrl='@web';
    public$css= [
       'front-lib/icheck/skins/all.css',
   ];
    public$js= [
       'front-lib/icheck/icheck.min.js',
   ];
    public$depends= [
       'yii\web\JqueryAsset',
       'yii\bootstrap\BootstrapAsset',
   ];
 }

 

4、iCheck組件不是直接引入CSS就可以了,而是在頁(yè)面需要執(zhí)行一段JS代碼才能把顯示樣式修改過(guò)來(lái),因此需要注冊(cè)iCheck初始化代碼:

 
 
namespacebackend\assets;
 
 useyii\web\AssetBundle;
 
 classICheckAssetextendsAssetBundle
{
   public$basePath='@webroot';
    public$baseUrl='@web';
    public$css= [
       'front-lib/icheck/skins/all.css',
   ];
    public$js= [
       'front-lib/icheck/icheck.min.js',
   ];
    public$depends= [
       'yii\web\JqueryAsset',
       'yii\bootstrap\BootstrapAsset',
   ];
 
    public functionregisterAssetFiles($view)
    {
       parent::registerAssetFiles($view);
 
       $view->registerJs(
           '$("input").iCheck({
                checkboxClass: "icheckbox_minimal-blue",
                radioClass: "iradio_minimal-blue",
                increaseArea: "20%" // optional
            });'
       );
   }
}

 

注:這里固定配置為使用minimal/blue這個(gè)樣式。

5、使用資源包,在AppAssets中增加配置(注意路徑):

public$depends= [
    'backend\assets\ICheckAsset',
    'yii\web\YiiAsset',
    'yii\bootstrap\BootstrapAsset',
 ];

 

6、顯示效果如下:

                           Yii2 —— 實(shí)現(xiàn)自己的iCheck資源包  

 

至此,就初步完成了將iCheck封裝到資源包的過(guò)程,但是現(xiàn)在還有幾個(gè)遺留問(wèn)題:

1、從上圖可以看出,明顯checkbox控件位置偏右了;

2、iCheck支持很多個(gè)樣式,可是上面代碼卻固定成minimal/blue,影響適用性;

3、引入的是all.css,沒(méi)有按需引入,這樣會(huì)導(dǎo)致CSS文件比較大;

 

下面把上述問(wèn)題逐一解決。

1.1.2 控件位置

1.1.2.1原因

在使用iCheck之前,checkbox和文字是這樣的:

Yii2 —— 實(shí)現(xiàn)自己的iCheck資源包

 

input控件在label控件內(nèi),label控件為了給checkbox控件空出位置,設(shè)置了一個(gè)padding-left:20px屬性,使得文字向右偏移20個(gè)字節(jié)。

 

在使用了iCheck之后,checkbox和文字是這樣的:

Yii2 —— 實(shí)現(xiàn)自己的iCheck資源包

iCheck初始化后,將原來(lái)的input控件外面又包了一層div,導(dǎo)致input控件和文字被label視作一個(gè)整體,使得“padding-left:20px”屬性也作用到div上,使得checkbox和文字都被右移20px。

1.1.2.2解決辦法

檢查label控件的屬性,發(fā)現(xiàn)這個(gè)“padding-left:20px”屬性是forms.less中定義的,這個(gè)less文件是bootstrap的,所以直接修改這個(gè)文件不是個(gè)好主意。

 

最終確定在資源包內(nèi)修改如下:

public functionregisterAssetFiles($view)
 {
    parent::registerAssetFiles($view);
 
    $view->registerJs(
        '$("input").iCheck({
             checkboxClass:  "icheckbox_minimal-blue",
             radioClass:  "iradio_minimal-blue",
             increaseArea:  "20%" // optional
         });
        $(".icheckbox_minimal-blue").css("margin-left",  "-20px");
          $(".iradio_minimal-blue").css("margin-left",  "-20px");'
    );
 }

 

1.1.3 支持多樣式

支持iCheck的多個(gè)樣式,也是在資源包里實(shí)現(xiàn):

1、首先定義樣式名稱:

 
 
namespacebackend\assets;
 
 useyii\web\AssetBundle;
 
 classICheckAssetextendsAssetBundle
 {
    constSKIN_ALL='all';
     constSKIN_FLAT='flat/_all';
     constSKIN_FLAT_AERO='flat/aero';
     constSKIN_FLAT_BLUE='flat/blue';
     constSKIN_FLAT_FLAT='flat/flat';
     constSKIN_FLAT_GREEN='flat/green';
     constSKIN_FLAT_GREY='flat/grey';
     constSKIN_FLAT_ORANGE='flat/orange';
     constSKIN_FLAT_PINK='flat/pink';
     constSKIN_FLAT_PURPLE='flat/purple';
     constSKIN_FLAT_RED='flat/red';
     constSKIN_FLAT_YELLOW='flat/yellow';
     constSKIN_FUTURICO='futurico/futurico';
     constSKIN_LINE='line/_all';
     constSKIN_LINE_AERO='line/aero';
     constSKIN_LINE_BLUE='line/blue';
     constSKIN_LINE_GREEN='line/green';
     constSKIN_LINE_GREY='line/grey';
     constSKIN_LINE_LINE='line/line';
     constSKIN_LINE_ORANGE='line/orange';
     constSKIN_LINE_PINK='line/pink';
     constSKIN_LINE_PURPLE='line/purple';
     constSKIN_LINE_RED='line/red';
     constSKIN_LINE_YELLOW='line/yellow';
     constSKIN_MINIMAL='minimal/_all';
     constSKIN_MINIMAL_AERO='minimal/aero';
     constSKIN_MINIMAL_BLUE='minimal/blue';
     constSKIN_MINIMAL_GREEN='minimal/green';
     constSKIN_MINIMAL_GREY='minimal/grey';
     constSKIN_MINIMAL_LINE='minimal/minimal';
     constSKIN_MINIMAL_ORANGE  ='minimal/orange';
     constSKIN_MINIMAL_PINK='minimal/pink';
     constSKIN_MINIMAL_PURPLE  ='minimal/purple';
     constSKIN_MINIMAL_RED='minimal/red';
     constSKIN_MINIMAL_YELLOW  ='minimal/yellow';
     constSKIN_POLARIS='polaris/polaris';
     constSKIN_SQUARE='square/_all';
     constSKIN_SQUARE_AERO='square/aero';
     constSKIN_SQUARE_BLUE='square/blue';
     constSKIN_SQUARE_GREEN='square/green';
     constSKIN_SQUARE_GREY='square/grey';
     constSKIN_SQUARE_LINE='square/square';
     constSKIN_SQUARE_ORANGE='square/orange';
     constSKIN_SQUARE_PINK='square/pink';
     constSKIN_SQUARE_PURPLE='square/purple';
     constSKIN_SQUARE_RED='square/red';
     constSKIN_SQUARE_YELLOW='square/yellow';
 
     public static$skin='all';
 
     public$basePath='@webroot';
     public$baseUrl='@web';
     public$css= [
        'front-lib/icheck/skins/all.css',
    ];
     public$js= [
        'front-lib/icheck/icheck.min.js',
    ];
     public$depends= [
        'yii\web\JqueryAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
 
    public functionregisterAssetFiles($view)
     {
        parent::registerAssetFiles($view);
 
        $view->registerJs(
            '$("input").iCheck({
                 checkboxClass:  "icheckbox_minimal-blue",
                 radioClass:  "iradio_minimal-blue",
                 increaseArea:  "20%" // optional
             });
              $(".icheckbox_minimal-blue").css("margin-left",  "-20px");
              $(".iradio_minimal-blue").css("margin-left",  "-20px");'
        );
    }
 }

 

2、初始化時(shí)載入指定的CSS文件:

 

 
 
namespacebackend\assets;
 
 useyii\web\AssetBundle;
 
 classICheckAssetextendsAssetBundle
{
     public static$skin=self::SKIN_MINIMAL_BLUE;
 


     public$basePath='@webroot';
     public$baseUrl='@web/front-lib/icheck';
     public$depends= [
        'yii\web\JqueryAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
 
    /**
      * @inheritdoc
     
*/
    
public functioninit()
     {
         parent::init();
         $this->css = [
             'skins/' . self::$skin  . '.css',
         ];
         // detect is debug mode and  select uncompressed js file
         $jsFile = YII_DEBUG ?  'icheck.js' : 'icheck.min.js';
         $this->js = [
             $jsFile,
         ];
     }
 }

 

3、根據(jù)設(shè)置的樣式名稱初始化checkbox控件:

public functionregisterAssetFiles($view)
 {
    parent::registerAssetFiles($view);
 
    $cssClassSuffix= str_replace('/','-', self::$skin);
    $view->registerJs(
        '$("input").iCheck({
             checkboxClass:  "icheckbox_'.$cssClassSuffix.'",
             radioClass: "iradio_'.$cssClassSuffix.'",
             increaseArea:  "20%" // optional
         });
         $(".icheckbox_'.$cssClassSuffix.'").css("margin-left",  "-20px");
         $(".iradio_'.$cssClassSuffix.'").css("margin-left",  "-20px");'
    );
 }

 

這樣,就封裝好了,想要什么樣式,就配置這個(gè)包里的$skin參數(shù)即可。

1.1.4 按需載入

實(shí)現(xiàn)上一節(jié)的支持多樣式,其實(shí)同時(shí)也實(shí)現(xiàn)了按需載入的功能,參見(jiàn)下圖:

Yii2 —— 實(shí)現(xiàn)自己的iCheck資源包

1.1.5 可復(fù)用

iCheck是個(gè)很常用的前端庫(kù),前面是只將其放到了backend端,其實(shí)frontend端也很有可能會(huì)用到,因此再進(jìn)一步,可以把iCheck放到框架層,使其可以更好的被復(fù)用:

1、在vendor下建立frontlib子目錄,然后將icheck包拷貝進(jìn)去,目錄結(jié)構(gòu)如下:

Yii2 —— 實(shí)現(xiàn)自己的iCheck資源包

 

2、將前面實(shí)現(xiàn)的ICheckAsset.php也轉(zhuǎn)到這個(gè)目錄下(如上圖);

3、打開(kāi)ICheckAsset.php,修改代碼:

/*public $basePath =  '@webroot';
 public $baseUrl = '@web/frontlib/icheck';*/
 public$sourcePath='@vendor/frontlib/icheck';

即注釋掉$basePath和$baseUrl的賦值,改為對(duì)$sourcePath初始化,根據(jù)Yii文檔,$basePath和$baseUrl參數(shù)是不能跟$sourcePath共存。Yii在運(yùn)行時(shí),會(huì)根據(jù)$sourcePath所指定的路徑,將資源文件拷貝到assets目錄下。

4、在使用iCheck資源的地方,修改代碼如下:

classAppAssetextendsAssetBundle
 {
    public$basePath='@webroot';
     public$baseUrl='@web';
     public$css= [
        'css/site.css',
        'css/common.css',
        'css/login.css',
    ];
     public$js= [
     ];
     public$depends= [
        'vendor\frontlib\icheck\ICheckAsset',
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
 }

 

 


標(biāo)題名稱:Yii2——實(shí)現(xiàn)自己的iCheck資源包
網(wǎng)頁(yè)鏈接:http://weahome.cn/article/ghpees.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部