參考文檔:
Yii2.0對于CSS/JS 管理,使用AssetBundle資源包類。視圖如何按需加載CSS/JS ?
在頁面中使用預先定義好的資源包類,譬如:backend/assets/AppAsset.php,使用到的CSS/JS都放在資源包裡。AppAsset.php代碼:
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',
}
說明:
$css:引入頁面的CSS檔案
$js:引入頁面的JS檔案
$depends:引入依賴的前端庫
在加載時,$depends中的前端庫先加載,$css和$js中的檔案後加載。一般來說,CSS放在<head></head>中加載,JS在<body></body>的底部加載。CSS/JS檔案的路徑,存放在$basePath參數所指定的目錄下,$css/$js參數指定的是相對路徑。在$depends中配置的依賴庫會先加載。
使用這種方式管理前端資源,感覺比Yii 1中的方式清爽很多,使用時,在view的檔案中增加代碼:
<?php
/* @var $this \yii\web\View */
/* @var $content string */
use backend\assets\AppAsset;
use yii\helpers\Html;
use yii\bootstrap\Nav;
use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs;
use common\widgets\Alert;
AppAsset::register($this);
?>
在Yii的backend/web和front/web目錄下,均有assets子目錄,下面有一些貌似随機數字和字元組成的目錄,裡面放的是一些前端庫的代碼,譬如jquery、bootstrap等,這些子目錄在應用最開始運作之前是沒有的,隻是通路了某些頁面後就有了,這是怎麼回事呢?
這是因為一些前端庫儲存的目錄,在web下是不能直接被通路的,為了保證頁面中可以正常使用,Yii會将這些庫的檔案拷貝到assets目錄下。
哪些前端庫會被拷貝呢?
這個取決于資源包的php檔案中是否配置了$sourcePath參數,隻有配置了$sourcePath參數,并且沒有配置$basePath和$baseUrl的,在執行時前端庫就會被拷貝到assets目錄下,并且以源目錄的hash值建立子目錄。
資源更新了怎麼辦?
在AssetManager->hash()函數中,它是根據源目錄/檔案名+更新時間做hash的,是以,如果更新時間發生了變化,就會計算出新的hash值,而新的hash值所表示的目錄在assets目錄下不存在,是以就會建立新的目錄,并且拷貝更新後的資源檔案到新的目錄下。
這樣做有幾個問題:
1、assets目錄下的子目錄可能會越來越多,存在很多垃圾目錄;
解決辦法:定期清除assets下的子目錄。
2、更新源目錄下子目錄内的資源,源目錄的更新時間不會改變,導緻資源不會被釋出;
解決辦法:釋出後清除assets下的子目錄。
在Yii 2中,常用的前端庫:
庫
版本号
資源包
實際資源路徑
bootstrap
3.3.7
BootstrapAsset.php
vendor\bower\bootstrap\dist
jquery
2.2.4
JqueryAsset
vendor\bower\jquery\dist
注:BootstrapAsset中,隻引入了bootstrap.css,沒有引入bootstrap.js,估計是為了性能吧。
本文轉自 tywali 51CTO部落格,原文連結:http://blog.51cto.com/lancelot/1871256,如需轉載請自行聯系原作者