时间:2016-03-21 17:48:40

标签: javascript css yii2

我使用Yii2并使用我的css和javascript文件创建了资产包。我整合了一个现有模板和一些javascripts在HEAD和其他人身上调用。我知道公共的$ jsOptions如果你想要它们在头部或身体末端都要声明。但是有一种方法可以包括一些头部和一些身体? 这是我的名单,我需要先4个头,最后2个身体。

public $js = [
        'js/jquery.min.js',
        'js/bootstrap.min.js',
        'js/custom.js',
        'js/moment/moment.min.js',
        'js/datepicker/daterangepicker.js',
        'js/custom2.js'
    ];

我通过@chapskev的建议删除了bootstrap和jquery,我去了这里,并尝试实现第3个选项:http://www.yiiframework.com/doc-2.0/yii-web-assetbundle.html# $ js-detail

public $js = [
        'js/custom.js',
        ['js/moment/moment.min.js' => ['position' => View::POS_END]],
        ['js/datepicker/daterangepicker.js' => ['position' => View::POS_END]],
        ['js/custom2.js' => ['position' => View::POS_END]],
    ];
    public $jsOptions = ['position' => View::POS_HEAD];

但是我得到了这个错误:strncmp()期望参数1是字符串,给定的数组显然我没有做得好所以我试过这个,这不是给出错误,但不是包括文件:

'js/custom2.js' => ['position' => \yii\web\View::POS_END],

2 个答案:

答案 0 :(得分:1)

您可以这种方式使用两种资产 在AppAsset中,您声明了两个依赖项

<?php

class AppAsset extends AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $css = [
        'css/site.css',

    ];
    public $js = [
        'js/jquery.min.js',
        'js/bootstrap.min.js',
        'js/custom.js',
        'js/moment/moment.min.js',
    ];
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
        'frontend\assets\HeaderAsset',
        'frontend\assets\BodyAsset',                   
    ];
}

?>

然后创建HeaderAsset.php

<?php

namespace frontend\assets;

use yii\web\AssetBundle;
use yii\web\View;

class HeaderAsset extends AssetBundle
{
    // The files are not web directory accessible, therefore we need
    // to specify the sourcePath property. Notice the @vendor alias used.
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $js = [
        'js/jquery.min.js',
        'js/bootstrap.min.js',
        'js/custom.js',
        'js/moment/moment.min.js',
    ];    
    public $jsOptions  = ['position'=> View::POS_HEAD,],
}          

?>

和BodyAsset.php

<?php

namespace frontend\assets;

use yii\web\AssetBundle;
use yii\web\View;

class BodyAsset extends AssetBundle
{
    // The files are not web directory accessible, therefore we need
    // to specify the sourcePath property. Notice the @vendor alias used.
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $js = [
        'js/datepicker/daterangepicker.js',
        'js/custom2.js'
    ];    
    public $jsOptions  = ['position' => View::POS_END,],

}  

?>

答案 1 :(得分:0)

首先,我认为你会遇到冲突的Jquery,因为yay2与Jquery和bootstrap捆绑在一起。

除非你在config上覆盖了它们,否则你应该删除Jquery和bootstrap Js。

public $js = [
        'js/custom.js',
        'js/moment/moment.min.js',
        'js/datepicker/daterangepicker.js',
        'js/custom2.js'
    ];