yii2框架-yii2的asset资源包(十一)

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

代码:

<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace app\assets;

use yii\web\AssetBundle;

/**
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/site.css',
    ];
    public $js = [
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];

    //定义按需加载JS方法,注意加载顺序在最后  
    public static function addJs($view, $jsfile) { 
        $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'app\assets\AppAsset','position'=>$view::POS_END]);  
    }  
      
    //定义按需加载css方法,注意加载顺序在最后  
    public static function addCss($view, $cssfile) {  
        $view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'app\assets\AppAsset','position'=>$view::POS_END]);  
    }

    //将需要加载的文件已数组聚合后在加载
    public static function addJsArr($view,$arr = null) {
        if(!is_array($arr)) {
            throw new \yii\base\InvalidConfigException('the seconed params must be array type!');
            return ;
        }
        foreach ($arr as $jsfile) {
           $view->registerJsFile($jsfile, [AppAsset::className(), 'depends' => 'app\assets\AppAsset','position'=>$view::POS_END]); 
        }
    }

    //将需要加载的文件已数组聚合后在加载
    public static function addCssArr($view,$arr = null) {
        if(!is_array($arr)) {
            throw new \yii\base\InvalidConfigException('the seconed params must be array type!');
            return ;
        }
        foreach ($arr as $cssfile) {
           $view->registerCssFile($cssfile, [AppAsset::className(), 'depends' => 'app\assets\AppAsset','position'=>$view::POS_END]); 
        }
    }      
}</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(使用数据块)

<div id="mybutton">点我弹出OK</div>  
  
<?php $this->beginBlock('test') ?>  
    $(function($) {  
      $('#mybutton').click(function() {  
        alert('OK');  
      });  
    });  
<?php $this->endBlock() ?>  
<?php $this->registerJs($this->blocks['test'], \yii\web\View::POS_END); ?>  

或者
<?php
$this->registerJs(
   '$("document").ready(function(){ 
        $("#login-form").validate({
            errorElement : "small", 
            errorClass : "error",
            rules: {
                     "AgNav[nav_cn]": {
                         required: true,
                     },
            },
            messages:{
                   "AgNav[nav_cn]" : {  
                        required : "此字段不能为空.",
                    },
            }
        });
    });'
);
?></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‘ ,此处加载的顺序将会颠倒。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值