For the complete documentation index, see llms.txt. This page is also available as Markdown.

Пользовательские вставки HTML, CSS и JavaScript

ng-custom — это специальный каталог основного сайта, через который можно подключать пользовательские HTML, CSS и JavaScript-вставки без изменения исходного Angular-кода и без пересборки основного frontend-приложения.

Этот механизм нужен для подключения внешних сервисов и дополнительных клиентских вставок, которые должны работать на публичной части сайта.

Через ng-custom можно подключать:

  • онлайн-чаты;

  • системы аналитики;

  • рекламные пиксели;

  • сторонние JavaScript-виджеты;

  • HTML-коды внешних сервисов;

  • verification meta-теги;

  • JSON-LD-разметку;

  • noscript-коды;

  • собственные CSS-файлы;

  • пользовательский JavaScript.

Публичный путь для файлов всегда один: /ng-custom/

Пример публичной ссылки:

https://example.com/ng-custom/client-scripts.js

Главное правило

ng-custom работает только для основного сайта, то есть для Angular frontend.

Если проект разделён так:

то ng-custom нужно создавать только в основном сайте:

Не нужно создавать ng-custom в backend-папке, в админке или в API-проекте.

ng-custom не влияет на Laravel backend, API, админ-панель и backend-страницы. Он предназначен только для публичного frontend-сайта.


Как устроена система

В проекте могут встречаться два типа каталогов ng-custom.

/ng-custom/
Что означает

public/ng-custom/

Основная runtime-папка для клиентских вставок на production

dist/.../ng-custom/

Папка внутри результата сборки Angular

Для ручной настройки на сервере используйте именно:

Каталог dist — это результат сборки. Его не рекомендуется редактировать вручную, потому что при следующей сборке файлы могут быть перезаписаны.

Правильная логика такая:


Структура каталога

Внутри public/ng-custom/ создаются основные файлы:

Итоговая структура:

Если нужны отдельные SSR-вставки для разных языков, можно добавить языковые папки:

Если языкового файла нет, система использует общий файл из корня public/ng-custom/.


Режимы работы

ng-custom поддерживает два режима работы:

Режим
Что делает
Для чего использовать

Browser Mode

Загружает код уже в браузере после открытия сайта

Онлайн-чаты, пиксели, виджеты, JS-коды

SSR Mode

Вставляет код сразу в исходный HTML, который отдаёт сервер

Meta-теги, JSON-LD, noscript, SEO-коды

Оба режима можно включить одновременно.

Browser Mode

Browser Mode — это режим, при котором пользовательский код загружается уже в браузере после открытия страницы.

Этот режим подходит для сервисов, которым не обязательно быть в исходном HTML страницы.

Используйте Browser Mode для:

  • онлайн-чатов;

  • рекламных пикселей;

  • аналитики;

  • сторонних JavaScript-виджетов;

  • pop-up сервисов;

  • callback-виджетов;

  • небольших пользовательских скриптов.

Файлы Browser Mode:

1

client-scripts.js

client-scripts.js используется для JavaScript-кода.

Этот файл:

  • выполняется только в браузере;

  • не выполняется на SSR;

  • не входит в Angular bundle;

  • может изменяться отдельно от основного приложения.

Пример подключения внешнего виджета:

2

API внутри client-scripts.js

В client-scripts.js доступен объект api.

Метод

Для чего нужен

api.loadScript(src, options)

Подключает внешний JavaScript-файл

api.injectHtml(html, options)

Вставляет HTML в страницу и выполняет script-теги

api.onReady(callback)

Выполняет код после готовности DOM

api.safeRun(callback, label)

Выполняет код безопасно через try/catch

Пример безопасного выполнения кода:

3

client-snippets.html

client-snippets.html используется для готового HTML-кода от сторонних сервисов.

Например, если внешний сервис выдал готовый блок с div и script, его можно вставить в этот файл.

Пример:

Система обработает файл автоматически:

Что находится в файле
Что сделает система

Обычные HTML-элементы

Добавит в страницу

meta, link, style, title

Перенесёт в head

script

Пересоздаст и выполнит

<base>

Проигнорирует, чтобы не сломать маршруты сайта

SSR Mode

SSR Mode — это режим, при котором содержимое файлов вставляется прямо в HTML, который отдаёт сервер.

Этот режим нужен, если внешний сервис требует, чтобы код был именно в исходном HTML страницы.

Используйте SSR Mode для:

  • Google Site Verification;

  • Yandex Verification;

  • meta-тегов подтверждения домена;

  • JSON-LD;

  • Schema.org;

  • SEO-разметки;

  • noscript-кодов;

  • сервисов, которые требуют вставку сразу после <body>.

Файлы SSR Mode:

1

ssr-head.html

ssr-head.html вставляется перед закрывающим тегом:

Используйте для кода, который должен находиться внутри head.

Подходит для:

  • verification meta-тегов;

  • JSON-LD;

  • Schema.org;

  • preconnect;

  • stylesheet;

  • дополнительных link-тегов.

Пример:

2

ssr-body-start.html

ssr-body-start.html вставляется сразу после открытия:

Используйте для кодов, которые должны быть размещены в начале body.

Подходит для:

  • noscript;

  • Google Tag Manager fallback;

  • сервисов, которые требуют вставку сразу после <body>.

Пример:

3

ssr-body-end.html

ssr-body-end.html вставляется перед закрывающим тегом:

Используйте для скриптов, которые должны быть в исходном HTML, но не должны блокировать загрузку страницы.

Пример:


Создание папки на FastPanel

На сервере нужно создать каталог public/ng-custom/ в основном frontend-сайте.

Перед выполнением команд замените:

на пользователя основного сайта в FastPanel.

Замените:

на основной домен сайта.

Создайте папку:

Создайте основные файлы:

Если нужны языковые папки:


Настройка ENV

В ENV основного frontend/SSR-сайта укажите путь к runtime-папке ng-custom.

Пример:

Переменная
Что означает

CLIENT_CUSTOM_DIR

Полный путь к папке public/ng-custom

CLIENT_CUSTOM_SCRIPTS_ENABLED=true

Включает Browser Mode

CLIENT_CUSTOM_SSR_ENABLED=true

Включает SSR Mode

Если нужны только browser-вставки:

Если нужны только SSR-вставки:

После изменения ENV нужно перезапустить SSR-процесс сайта.

После изменения самих файлов внутри public/ng-custom/ пересборка Angular обычно не нужна.

Настройка Nginx

В nginx-конфиг основного frontend-домена добавьте отдельный блок:

Важно:

Правило
Почему важно

Использовать alias

Так Nginx отдаёт файлы из нужной папки

alias должен заканчиваться /

Это нужно для корректного сопоставления путей

Не ставить долгий кеш

Файлы могут часто меняться вручную

Указывать frontend-папку

ng-custom относится к основному сайту, а не к backend

Порядок поиска SSR-файлов

SSR-файлы могут быть общими или языковыми.

Допустим:

Система ищет файл в таком порядке:

Основное место для настройки:

dist используется как резервный слой после сборки, а не как основное место ручной настройки.

Как добавить код для всех языков

Если код одинаковый для всех языков, используйте общий файл:

Пример:

Как добавить код только для одного языка

Если код нужен только для английской версии, используйте:

Пример:

Если код нужен только для русской версии:

Важное отличие browser-файлов от SSR-файлов

Browser-файлы загружаются только из корня:

Они не загружаются автоматически из языковых папок:

Если нужен разный browser-код по языкам, сделайте условие внутри общего client-scripts.js.

Пример:

Подключение внешнего JavaScript

Если сервис дал код:

лучше подключить его через client-scripts.js.

Пример:

id нужен, чтобы один и тот же скрипт не добавлялся повторно.

Подключение готового HTML-кода

Если сервис дал готовый блок:

добавьте его в:

Система сама вставит HTML в страницу и выполнит скрипты.

Подключение собственного CSS

Создайте CSS-файл:

Затем подключите его в ssr-head.html:

После этого файл будет доступен по адресу:


Проверка работы

Проверьте, что файл отдаётся через Nginx:

Ожидаемый результат:

Проверьте SSR-вставки:

Если SSR-вставка работает, в HTML будут маркеры:

Для body-start:

Для body-end:


Почему код не отображается

Проверьте:

Что проверить
Что должно быть

Папка

Создана public/ng-custom/ в основном frontend-сайте

ENV

Указан правильный CLIENT_CUSTOM_DIR

Browser Mode

CLIENT_CUSTOM_SCRIPTS_ENABLED=true

SSR Mode

CLIENT_CUSTOM_SSR_ENABLED=true

SSR-процесс

Перезапущен после изменения ENV

Nginx

alias указывает на правильную папку

Файл

Файл не пустой и содержит рабочий код

Домен

Проверяется основной сайт, а не app. домен админки

Что нельзя делать

Не редактируйте dist как основную папку настройки.

Не создавайте ng-custom в backend-проекте.

Не вставляйте полный HTML-документ:

Вставляйте только нужные фрагменты.

Не используйте тег:

Он может сломать ссылки и маршрутизацию сайта.

Не давайте доступ к папке ng-custom случайным пользователям, потому что JavaScript из этой папки выполняется на сайте.

Рекомендуемые сценарии

Задача
Куда вставлять

Онлайн-чат

client-scripts.js или client-snippets.html

Meta verification

ssr-head.html

JSON-LD

ssr-head.html

Noscript fallback

ssr-body-start.html

Внешний JS-файл

client-scripts.js

Готовый HTML-код сервиса

client-snippets.html

Собственный CSS

custom.css + подключение в ssr-head.html

Скрипт перед закрытием body

ssr-body-end.html


Итоговая схема

Основной сайт:

Рабочая папка для вставок:

Публичный URL:

ENV:

Nginx:

Проверка:


Коротко

ng-custom — это механизм для подключения пользовательских HTML, CSS и JavaScript-вставок на основном сайте iEXExchanger.

Он позволяет подключать сторонние сервисы, аналитику, онлайн-чаты, SEO-разметку и собственные скрипты без изменения исходного кода платформы и без пересборки Angular-приложения.

Последнее обновление

Это было полезно?