Yii2.0 是如何引入js和css


今天上午沒事,重拾知識,此處是關於yii2.0是如何引入js 和css 使用總結

學習連接1:http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html

學習連接2:http://www.manks.top/article/yii2_load_js_css_in_end

學習連接3:http://www.yii-china.com/post/detail/39.html

 

問題:在開發web框架中,使用Yii2.0框架,我們也許會疑問,如果使用了layout /main.php 引入了公共的頭和尾,以及css 和 js。

對於特別文檔,我們想 “單獨” 的引入js 和 css 應該怎么辦?

通過學習,Yii2.0手冊對以上疑問進行了解答:

yii\web\View 對象可以注冊腳本。專門有兩種方法:為內聯腳本registerJs()  和 外部腳本registerJsFile()。內聯腳本可用於配置和動態生成的代碼。

一、內聯腳本registerJs()

使用如下:

//內部注冊js代碼
$jsString = "$(function(){
alert(123);
});";
$this->registerjs($jsString, View::POS_END);
或則
$this->registerJs("var options = ".json_encode($options).";", View::POS_END, 'my-options');

說明:

     第一個元素是我們在視圖文件中要寫入的 js 代碼

     第二個元素是我們決定這段代碼插入在視圖文件中具體那一個位置,具體參數如下:    

    第三個元素是表示這段代碼的ID,它具有唯一性,如果曾經有過某個ID,則它會替代或取代之前跟它同名的哪一個,如果不寫最后一個元素,則js代碼本身就是Id,可忽略最后一個元素

    $this 指 yii\web\View對象,用於管理和渲染視圖

還有這樣的一種寫法

 

<?php $this->beginBlock("aaa") ?>
    $(function () {
      //這里寫你的js代碼
    });
<?php $this->endBlock() ?>
<?php $this->registerJs($this->blocks["aaa"], \yii\web\View::POS_END); ?>

 

數據塊block可以在一個地方指定視圖內容在另一個地方顯示,通常和布局一起使用

例如:可在內容視圖中定義數據塊在布局中顯示它

  調用 yii\base\View::beginBlock() 和 yii\base\View::endBlock() 來定義數據塊

  使用 $view->blocks[$blockID] 訪問該數據塊

  其中 $blockID 為定義數據塊時指定的唯一標識ID。

可見內部寫法還是蠻靈活滴~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

二、外部腳本registerJsFile() 

使用如下:

<?php
use backend\assets\AppAsset;
use yii\web\View;
AppAsset::register($this);
//外部引入js文件
$this->registerJsFile(Yii::$app->request->baseUrl . 'js/mytest_js.js', ['depends' => backend\assets\AppAsset::className(), "position"=> $this::POS_END]);

 說明:引入外部 js文件

  第一個參數是文件的絕對路徑 Yii::$app->request->baseUrl 加js文件 

  第二個元素是織帶它是依賴於誰的,這里它是依賴 backend\assets\AppAsset::className() 對象的

  第三個元素是引入文件的位置,POS_END 說明是在</body>之前引入

    但是通常不使用這個引入的方式引入外部文件,因為每次引入一個文件都需要指定它是依賴於誰的,相對復雜,通常情況下我們使用包管理asset bundles進行注冊

    首先: 在這個文件中 backend\assets\AppAsset.php 可見,我們引入了兩個靜態方法,完整版的AppAsset類如下:

 

namespace backend\assets;  
  
use yii\web\AssetBundle;  
  
class AppAsset extends AssetBundle  {  
    public $basePath = '@webroot';  
    public $baseUrl = '@web';
      
    //全局CSS  
    public $css = [  
        'css/animate.css',  
        'css/style.min.css',  
    ]; 
     
    //全局JS  
    public $js = [  
        'js/jquery-2.1.1.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']);  
    }  
 }

 addScript()  和 addCss() 方法則是我們在視圖文件中進行注冊的鑰匙,通過如下使用方式,我們就不需要使用 $this->registerJsFile 進行注冊了

<?php
use backend\assets\AppAsset;use yii\web\View;
AppAsset::register($this);
//外部引入css文件 AppAsset::addCss($this,Yii::$app->request->baseUrl."/css/blog.css");

AppAsset::addScript($this, Yii::$app->request->baseUrl . '/js/waibu_js.js');

這樣是不是更簡單一些了呢,不需要在次指定它是依賴於誰誰了~~~~~~~~~~~~~~~

其中需要說明的是,需要注冊的文件都會在yii.js和bootstrap.js文件的后面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM