yii2的asset资源包

一、资源包定义
Yii2对于CSS/JS 管理,使用AssetBundle资源包类。
在basic/assets下创建如下:
app/assets/AppAsset.php
代码:

  1. <?php
  2. /**
  3.  * @link http://www.yiiframework.com/
  4.  * @copyright Copyright (c) 2008 Yii Software LLC
  5.  * @license http://www.yiiframework.com/license/
  6.  */
  7. namespace app\assets;
  8. use yii\web\AssetBundle;
  9. /**
  10.  * @author Qiang Xue <qiang.xue@gmail.com>
  11.  * @since 2.0
  12.  */
  13. class AppAsset extends AssetBundle
  14. {
  15.     public $basePath = ‘@webroot’;
  16.     public $baseUrl = ‘@web’;
  17.     public $css = [
  18.         ‘css/site.css’,
  19.     ];
  20.     public $js = [
  21.     ];
  22.     public $depends = [
  23.         ‘yii\web\YiiAsset’,
  24.         ‘yii\bootstrap\BootstrapAsset’,
  25.     ];
  26.     //定义按需加载JS方法,注意加载顺序在最后  
  27.     public static function addJs($view$jsfile) {
  28.         $view->registerJsFile($jsfile, [AppAsset::className(), ‘depends’ => ‘app\assets\AppAsset’,‘position’=>$view::POS_END]);
  29.     }
  30.     //定义按需加载css方法,注意加载顺序在最后  
  31.     public static function addCss($view$cssfile) {
  32.         $view->registerCssFile($cssfile, [AppAsset::className(), ‘depends’ => ‘app\assets\AppAsset’,‘position’=>$view::POS_END]);
  33.     }
  34.     //将需要加载的文件已数组聚合后在加载
  35.     public static function addJsArr($view,$arr = null) {
  36.         if(!is_array($arr)) {
  37.             throw new \yii\base\InvalidConfigException(‘the seconed params must be array type!’);
  38.             return ;
  39.         }
  40.         foreach ($arr as $jsfile) {
  41.            $view->registerJsFile($jsfile, [AppAsset::className(), ‘depends’ => ‘app\assets\AppAsset’,‘position’=>$view::POS_END]);
  42.         }
  43.     }
  44.     //将需要加载的文件已数组聚合后在加载
  45.     public static function addCssArr($view,$arr = null) {
  46.         if(!is_array($arr)) {
  47.             throw new \yii\base\InvalidConfigException(‘the seconed params must be array type!’);
  48.             return ;
  49.         }
  50.         foreach ($arr as $cssfile) {
  51.            $view->registerCssFile($cssfile, [AppAsset::className(), ‘depends’ => ‘app\assets\AppAsset’,‘position’=>$view::POS_END]);
  52.         }
  53.     }
  54. }</span>

二、视图使用:
1. 视图(或布局)使用全局CSS/JS
一般在layout的布局文件的使用
AppAsset::register($this);
加载顺序为:先加载需要的依赖文件 -> 再加载自定义全局CSS/JS
如果,某个视图需要单独引入一个CSS/JS,并且,在页面中还要写些CSS/JS,该如何做?
2. 在页面中单独写样式
$cssString = “.gray-bg{color:red;}”;
$this->registerCss($cssString);
3. 在页面中单独写JS(使用数据块)

  1. <div id=“mybutton”>点我弹出OK</div>
  2. <?php $this->beginBlock(‘test’) ?>
  3.     $(function($) {
  4.       $(‘#mybutton’).click(function() {
  5.         alert(‘OK’);
  6.       });
  7.     });
  8. <?php $this->endBlock() ?>
  9. <?php $this->registerJs($this->blocks[‘test’], \yii\web\View::POS_END); ?>
  10. 或者
  11. <?php
  12. $this->registerJs(
  13.    ‘$(“document”).ready(function(){
  14.         $(“#login-form”).validate({
  15.             errorElement : “small”,
  16.             errorClass : “error”,
  17.             rules: {
  18.                      “AgNav[nav_cn]”: {
  19.                          required: true,
  20.                      },
  21.             },
  22.             messages:{
  23.                    “AgNav[nav_cn]” : {
  24.                         required : “此字段不能为空.”,
  25.                     },
  26.             }
  27.         });
  28.     });’
  29. );
  30. ?></span>

4.视图中引入CSS/JS文件
然后再说下在视图中如何引入一个CSS/JS文件(不是定义在全局里的CSS或JS)
分别有两种方法:
方法1
在资源包管理器里面定义一个方法,然后在视图中注册即可(推荐使用这种)
如上面代码己定义:
如上面代码己定义:
//定义按需加载JS方法,注意加载顺序在最后
public static function addScript($view, $jsfile) {
$view->registerJsFile($jsfile, [AppAsset::className(), ‘depends’ => ‘backend\assets\AppAsset’]);
}
//只在该视图中使用非全局的jui,一般代码放在view文件的后面
AppAsset::addScript($this,’@web/js/jquery-ui.custom.min.js’);
此外注意:在上面的addScript方法中,如果没有 ’depends‘=>’xxx‘ ,此处加载的顺序将会颠倒。
 
http://blog.csdn.net/u012979009/article/details/51646687

发表评论

邮箱地址不会被公开。 必填项已用*标注