2016-06-24 40 views
0

應付項目要求我必須使用與Yii2一起使用的不同版本的jQuery。我知道我可以通過禁用它:Yii 2和jQuery

'assetManager' => [ 
     'bundles' => [ 
      // you can override AssetBundle configs here  
      'yii\web\JqueryAsset' => [ 
       'sourcePath' => null, 
       'js' => [] 
      ],   
     ], 
    ], 

然後我去AppAsset:

class AppAsset extends AssetBundle 
{ 
    public $sourcePath = "@app/themes/v1/assets"; 

    public $jsOptions = [ 'position' => \yii\web\View::POS_END ]; 

    public $js = [ 
     "js/lib/jquery/jquery-1.9.1.js", 

    ]; 
} 

但是,這帶來了一個大問題,yii.validation後jQuery的負載等:

</script><script src="/assets/5b466ff1/yii.js?v=1465857632"></script> 
<script src="/assets/5b466ff1/yii.validation.js?v=1465857632"></script> 
<script src="/assets/5b466ff1/yii.activeForm.js?v=1465857632"></script> 
<script src="/assets/98d185b3/js/lib/jquery/jquery-1.9.1.js?v=1466702133"></script> 

我的暫時解決方案是將POS_END更改爲POS_HEAD,但這會影響頁面搜索引擎優化?,據我所知,被認爲是不好的做法加載頭腦中的js。

所以我的問題是:

我怎樣才能yii.validation等之前使用POS_END和加載從我的主題資產加載jQuery的,?

一種可能性是將其添加到web/js/jquery.js中,但我更願意將其保留在資產包上。

任何想法?

更新:

添加這AppAsset讓我對主題本身控制。它比修改全局配置更清潔。

public function init() 
    { 
     parent::init(); 

     Yii::$app->assetManager->bundles['yii\\web\\JqueryAsset'] = [ 
      'js' => ['lib/jquery/jquery-1.9.1.js'], 
      'sourcePath' => '@app/themes/v1/assets/js' 
     ]; 

    } 

回答

1

只是改變你的配置代碼爲:

'assetManager' => [ 
     'bundles' => [ 
      'yii\web\JqueryAsset' => [ 
       'js' => ['lib/jquery/jquery-1.9.1.js'], 
       'sourcePath' => '@app/themes/v1/assets/js' 
      ] 
     ] 
    ] 

沒有必要AppAsset

class AppAsset extends AssetBundle 
{ 
    public $sourcePath = "@app/themes/v1/assets"; 
    public $jsOptions = [ 'position' => \yii\web\View::POS_END ]; 
    public $js = [ 
    //"js/lib/jquery/jquery-1.9.1.js" Not Required 
    ]; 
} 
+0

這麼簡單!定義jquery,我沒有嘗試。謝謝!! – Eduardo