yii 如何在head标记中注册jQuery资产?

erhoui1w  于 2022-11-09  发布在  jQuery
关注(0)|答案(2)|浏览(143)

我对Yii2资产包不太熟悉,Yii2资产包在页面顶部注册了css文件,在页面底部注册了js文件,但是我怎么能把js文件也包含在页面顶部呢?

class AppAsset extends \yii\web\AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}

我只需要所有的js和css文件注册在页面的顶部。使用AppAsset,是可行的吗?

编辑

默认注册脚本

<head>
....
<link href="/assets/4850c11c/css/bootstrap.css" rel="stylesheet">
....
</head>
<body>
.....
<script src="/assets/76016e7c/jquery.js"></script>
.....
</body>

我只需要

<head>
....
<link href="/assets/4850c11c/css/bootstrap.css" rel="stylesheet">
<script src="/assets/76016e7c/jquery.js"></script>
....
</head>
whitzsjs

whitzsjs1#

只需向包类添加一行即可。

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

您的代码将如下所示:

class AppAsset extends \yii\web\AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';
    public $jsOptions = ['position' => \yii\web\View::POS_HEAD];

    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];

    public $js = [
        'somefile.js'
    ];
}

或者,您也可以使用config数组而不是string在头部分只指定所需的文件(警告:第一个元素必须是文件名)。

class AppAsset extends \yii\web\AssetBundle
{
    public $basePath = '@webroot';
    public $baseUrl = '@web';

    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];

    public $js = [
        'this_file_will_be_at_end.js', // The default position
        ['but_this_will_be_at_header.js', 'position' => \yii\web\View::POS_HEAD],
        ['and_this_too.js', 'position' => \yii\web\View::POS_HEAD]
    ];
}
x6492ojm

x6492ojm2#

若要在页面的head部分中包含JavaScript文件(默认情况下,JavaScript文件包含在body部分的末尾),请使用以下选项:

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

或直接可见

$this->registerJs('js/myjsfile.js', $this::POS_HEAD);

您可以看到http://www.yiiframework.com/doc-2.0/guide-output-client-scripts.html
http://www.yiiframework.com/doc-2.0/guide-structure-assets.html

相关问题