Решение создано в основном для frontend-разработчиков, которые привыкли писать более лаконичный код используя less-файлы с объявлением общих переменных и древовидную систему объявления классов:
@rounded_corners: false;@links: #1ABC9C;@menu_links: #ffffff;@menu: #34495e;@base: #EDEFF1;@font: #333333;.wysiwyg-content { word-wrap: break-word; h1 { &.main-title { margin-top: 10px; padding-bottom: 10px; font-size: 36px; text-transform: uppercase; line-height: 155%; font-weight: normal; } &.main-title2 { margin-top: 45px; font-weight: normal; font-size: 37px; } @media (max-width: 767px) { &.main-title2, &.main-title { font-size: 24px; } } } h3 { &.main-title2 { margin: 78px 0 32px; font-size: 22px; font-weight: normal; } }}Как это работает- Обработчик подписан на системное событие main/OnProlog (регистрируется при установке модуля через RegisterModuleDependences), поэтому
выполняется на каждом хите автоматически, без ручного IncludeModule().
- При активном модуле на каждый запрос:
- Собирается список .less-файлов (по всей файловой структуре сайта —
кроме bitrix/, upload/, vendor/, node_modules/, .git/ (исключения настраиваются в админке) — либо
по ручному списку).
- Считается «отпечаток» состояния (путь + время изменения + размер
каждого файла).
- Если отпечаток совпадает с сохранённым и скомпилированный файл на
месте — пересборки не происходит, страница получает ссылку на уже
готовый style.css.
- Если отпечаток изменился (файл добавили/удалили/отредактировали) —
файлы компилируются заново через Less_Parser, результат атомарно
подменяет старый style.css.
- Итоговый файл кладётся в /upload/ecl_lesscompiler/<SITE_ID>/style.css
и подключается в <head> отдельным <link> через
$APPLICATION->SetAdditionalCSS() — независимо от остальных CSS темплейта/сайта.
- Композитный сайт: обработчик обращается только к файловой системе и добавляет <link> на статический файл — при генерации композитного снимка страницы этот <link> попадает в закешированный HTML, а сам style.css браузер после этого запрашивает напрямую, минуя PHP.
Ничего не мешает механизму композита.
- Directory-скан в режиме «все файлы» дополнительно кешируется на 60 минут (Bitrix\Main\Data\Cache), чтобы не обходить дерево каталогов на каждый хит; кнопка «Принудительно пересобрать сейчас» в настройках сбрасывает этот кеш и пересобирает CSS немедленно.
- Ошибка компиляции (синтаксис LESS, недостающий @import и т.п.) логируется в журнал событий Bitrix и не ломает страницу — если ранее уже был собран рабочий style.css, отдаётся он.
По всем вопросам просим обращаться через
сайт или по почте
helpdesk@ecom-labs.ruПоддержка осуществляется по будням с 8:00 до 17:00 по московскому времени. Скорость ответа зависит от загруженности команды и сложности вопроса, но в среднем составляет 1-2 рабочих дня.