Yii2 зарегистрируйте тип набора Js и удалите jquery

#yii #yii2 #yii2-basic-app

#yii #yii2 #yii2-basic-app

Вопрос:

я хочу иметь такой тег скрипта для каждого представления

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

с помощью
$this->registerJs(….)

я получаю такой код:

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

как добавить другой тип и как удалить jQuery ..?

Ответ №1:

По умолчанию registerJs() используется $position = View::POS_READY , а этот автоматически регистрирует ресурс jQuery. Если вы не хотите этого, вы можете использовать:

  • registerJs($js, yiiwebView::POS_HEAD) — чтобы поместить JS в головную часть
  • registerJs($js, yiiwebView::POS_BEGIN) — разместить JS в начале основной части
  • registerJs($js, yiiwebView::POS_END) — чтобы поместить JS в конец основной части

К сожалению, все это добавит ваш скрипт в стандартный <script> тег без типа.

Для достижения этого вы должны добавить его вручную, либо разместив <script...> самостоятельно, либо вызвав yiihelpersHtml::script($js, ['type' => 'application/ld json']) в своем представлении или файле макета.

Ответ №2:

Я использую это в макете. Использование блоков позволяет мне заменить это на другое schema.org на других страницах.

 <?= Html::script(isset($this->blocks['schema'])
    ? $this->blocks['schema']
    : yiihelpersJson::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(), чтобы избежать записи JS в файл PHP. Для меня так красивее, а также упрощает интерполяцию переменных.

  • В этом примере вы видите много $this->image|description|url потому что я использую https://github.com/daxslab/yii2-taggedview для расширения yii web View дополнительными атрибутами, чтобы автоматизировать генерацию тегов Opengraph и Twitter Cards.

Комментарии:

1. как мне сделать так, чтобы скрипт был сверху в <head> теге?

2. При использовании Html::script() он будет вставлен туда, где вы его повторяете