Yii2 注册 Js 设置类型并删除 jquery

Yii2 register Js set Type and remove jquery

我希望每个视图都有这样的脚本标签

<script type="application/ld+json">
/****** my code
</script>

与 $this->registerJs(....)

我得到了这种代码:

<script>jQuery(function ($) {
.....
});</script>

如何添加不同的类型以及如何删除 jQuery..?

默认情况下 registerJs() 正在使用 $position = View::POS_READY 而这个正在自动注册 jQuery 资产。如果你不想要这个,你可以使用:

  • registerJs($js, \yii\web\View::POS_HEAD) - 将 JS 放在头部
  • registerJs($js, \yii\web\View::POS_BEGIN) - 将 JS 放在正文部分的开头
  • registerJs($js, \yii\web\View::POS_END) - 将 JS 放在正文部分的末尾

不幸的是,所有这些都会将您的脚本添加到没有类型的标准 <script> 标签中。

要实现此目的,您必须通过自己放置 <script...> 或在视图或布局文件中调用 \yii\helpers\Html::script($js, ['type' => 'application/ld+json']) 来手动添加它。

我在布局中使用这个。使用块允许我将它替换为其他页面中的其他 schema.org。

<?= Html::script(isset($this->blocks['schema'])
    ? $this->blocks['schema']
    : \yii\helpers\Json::encode([
        '@context' => 'https://schema.org',
        '@type' => 'WebSite',
        'name' => Yii::$app->name,
        'image' => $this->image,
        'url' => $this->url,
        'descriptions' => $this->description,
        'author' => [
            '@type' => 'Organization',
            'name' => Yii::$app->name,
            'url' => Yii::$app->homeUrl,
            'telephone' => Yii::$app->params['phone'],
        ]
    ]), [
    'type' => 'application/ld+json',
]) ?>
  • 只需使用Html::script($js, $options).

  • 考虑使用Json::encode()避免在PHP中写JS 文件。这样对我来说更漂亮,也可以变 插值更容易。

  • 在这个例子中你看到了很多 $this->image|description|url 因为我正在使用 https://github.com/daxslab/yii2-taggedview 来扩展 yii\web\View 具有更多属性以便使 Opengraph 自动化 和 Twitter 卡片标签生成。