Yii2 引入css和js文件
根据依赖,框架会先加载jquery.js,然后是yii.js,最后是视图加载的js。
在视图页面上,引入js、css的方式有以下两种:
1.以注册脚本方式
1.1 使用registerJs()、registerCss()
注册内联脚本:
<?php
$this->registerJs("
$(function () {
//为所欲为的写你想要写的js代码吧
$......
});
", \yii\web\View::POS_END);
?>
1.2 使用registerJsFile()、registerCssFile()
注册引入外部脚本文件:
<?php
$this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['app\assets\AppAsset']]);
//$this->registerJsFile('@web/js/jquery-ui.custom.min.js',['depends'=>['app\assets\AppAsset'],'position'=>$this::POS_HEAD]);
//css定义一样
$this->registerCssFile('@web/css/font-awesome.min.css',['depends'=>['app\assets\AppAsset']]);
?>
我们强烈建议使用 asset bundles 来注册外部 JS 文件而非使用 registerJsFile() 来注册。 因为这些允许更好的灵活性和更精细的依赖配置。 此外,使用资源包允许您组合和压缩多个 JS 文件,这对于高流量网站来说是比较理想的方式。
——源自官方文档
1.3 使用jsFile()、cssFile()
注册引入外部脚本文件:
<?= \yii\helpers\Html::cssFile('@web/css/index.css')?>
<?= \yii\helpers\Html::jsFile('@web/js/jquery.min.js')?>
1.4 直接写原生代码引入:
<script src="js/nav.js"></script>
2.以注册资源包方式
2.1 在view层注册自定义资源包:
<?php
use app\assets\XXXXAsset;
AppAsset::register($this); // $this 代表视图对象
?>
2.2 视图(或布局)使用全局CSS/JS,即在AppAsset类里载入js、css文件,再在view层中注册资源包:
<?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';
//全局css 在这个添加css文件
public $css = [
'css/site.css',
'css/base.css'
];
//全局js 在这里添加js文件
public $js = [
'js/sliders.js'
];
public $depends = [ //依赖包,没有可以不写
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
}
如在layout/main.php中注册AppAsset资源包(使用该模板的所有页面都会引用全局js、css文件):
<?php
use app\assets\AppAsset;
AppAsset::register($this);
?>
2.3 在AppAsset类里添加了两个静态方法,再在view层加载外部js、css文件:
namespace backend\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 addScript($view, $jsfile) {
$view->registerJsFile($jsfile, [AppAsset::className(), "depends" => "backend\assets\AppAsset"]);
}
//定义按需加载css方法,注意加载顺序在最后
public static function addCss($view, $cssfile) {
$view->registerCssFile($cssfile, [AppAsset::className(), "depends" => "backend\assets\AppAsset"]);
}
}
在view层载入外部js文件:
use backend\assets\AppAsset;
AppAsset::register($this);
//需要注意的是,如果引入的文件是相对路径加载,烦请记得路径前加上 Yii::$app->request->baseUrl, 否则在一定情况下将会加载失败。
AppAsset::addScript($this,Yii::$app->request->baseUrl."/css/main.js");
- 我们先来说说添加的addScript和addCss有啥作用,意图是啥,上面说了,不建议在view层直接用
$this->registerJsFile
方法注册文件,这里呢,我们添加的addScript方法,以后view层直接调用这个方法对文件进行注册。
- 那为啥这个就好了呢?好处是非常明显的,调用该方法避免了每次注册文件都要填写依赖关系,十分方便。
- 其中需要说明的是,需要注册的文件都会在yii.js和bootstrap.js文件的后面,这也正是我们所需要的。
总结:
使用AssetBundle管理css样式及js脚本(2.1 和 2.2),资源包允许您组合和压缩多个 JS 文件,这对于高流量网站来说是比较理想的方式。(持续更新ing...)
官方文档:
https://www.yiiframework.com/doc/guide/2.0/zh-cn/structure-assets
https://www.yiiframework.com/doc/guide/2.0/zh-cn/output-client-scripts
参考地址:
https://blog.csdn.net/cs23405/article/details/46865027
http://www.manks.top/article/yii2_load_js_css_in_end
https://segmentfault.com/a/1190000003742452
https://www.php.cn/phpkj/yii/443034.html
https://www.yiichina.com/tutorial/405
https://www.yiichina.com/topic/7204