我使用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],
答案 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'
];