#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() он будет вставлен туда, где вы его повторяете