Trip2g: htmlInjections в HTML layouts
Кастомный HTML/Jet layout в Trip2g должен сам вывести HTML-инъекции сайта. Иначе скрипты из Admin → HTML Injections — аналитика, пиксели, SEO-теги, кастомный <head> — не попадут на страницу с кастомным layout.
Связано: Wiki, iiminion layout README, официальная документация Trip2g.
Правильная вставка
Внутри полного HTML layout добавляй обе зоны:
<head>
...
{{ range i, injection := htmlInjectionsHead }}{{ injection.Content | unsafe }}{{ end }}
</head>
<body>
...
{{ range i, injection := htmlInjectionsBodyEnd }}{{ injection.Content | unsafe }}{{ end }}
</body>
Где ставить:
htmlInjectionsHead— перед</head>.htmlInjectionsBodyEnd— перед</body>.
Важный синтаксис Jet
Используй две переменные в range:
{{ range i, injection := htmlInjectionsHead }}{{ injection.Content | unsafe }}{{ end }}
{{ range i, injection := htmlInjectionsBodyEnd }}{{ injection.Content | unsafe }}{{ end }}
Не используй однопеременную форму:
{{ range injection := htmlInjectionsHead }}{{ injection.Content | unsafe }}{{ end }}
Почему: в Jet однопеременный range item := slice даёт индекс, а не значение. Пока список пустой, ошибки может не быть. Когда в Admin появится реальная инъекция, injection станет числом, и injection.Content даст runtime error.
Пример из iiminion
В _layouts/iiminion/_blocks.html схема такая:
<head>
...
{{ range index, injection := htmlInjectionsHead }}{{ injection.Content | unsafe }}{{ end }}
</head>
<body>
{{ yield content }}
<script defer src="{{ asset("scripts.js") }}"></script>
{{ range index, injection := htmlInjectionsBodyEnd }}{{ injection.Content | unsafe }}{{ end }}
</body>
Смысл: layout остаётся полностью кастомным, но глобальные скрипты сайта подключаются автоматически.
Когда это обязательно
Добавляй htmlInjections в каждый layout, который сам рисует полный документ:
- есть
<!doctype html>/<html>; - есть собственные
<head>и<body>; - используется для лендингов, публичных страниц, форм, промо-страниц;
- нужно, чтобы GA4, Яндекс.Метрика, пиксели или другие инъекции работали на странице.
Если layout только блок/partial и вставляется внутрь другого shell-layout, htmlInjections должен выводить внешний shell, а не каждый блок.
Проверка
После синка проверь live-страницу:
- HTTP 200 и нет
Layout Error. - В HTML есть ожидаемый код инъекции из Admin.
- Нет
Runtime Errorиз-за неправильногоrange. - Инъекция из
headнаходится до</head>, аbody_end— перед</body>.
Правило: любой полный custom HTML layout в Trip2g должен явно выводить htmlInjectionsHead и htmlInjectionsBodyEnd двухпеременным range.