2016-06-24 2 views
0

Требования к проекту Я должен использовать другую версию jQuery, отличную от той, которая поставляется с Yii2. Я знаю, что можно отключить с помощью: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", 

    ]; 
} 

Но это приносит один большой вопрос, Jquery нагрузки после yii.validation и т.д.:

</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, но это влияет на страницу SEO правильно? Насколько я знаю, считается плохой практикой для загрузки js на голове.

Так что мой вопрос:

Как я могу загрузить JQuery из моих тематических активов, используя POS_END и загрузки, прежде чем yii.validation и т.д.?

Возможность добавить его на веб-сайте/js/jquery.js, но я бы предпочел сохранить его в комплекте с активами.

Любые идеи?

Update:

Добавление это 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

Просто изменить свой код Config как:

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

Нет необходимости определять jquery в 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

Так просто !!!, я не пробовал это. Благодаря!! – Eduardo