Пользовательские вставки 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.
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:
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
Пример безопасного выполнения кода:
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:
Создание папки на 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-приложения.
Последнее обновление
Это было полезно?