5.2 KiB
Блоки
← К разделу «Как собирается сайт»
Блок — переиспользуемый фрагмент содержимого или проектной логики. Один блок можно вставить в шаблон сайта, рубрику, запрос или другой блок.
Создание блока
Для блока задаются название, уникальный alias, группа, описание, активность и режим редактора. Группа нужна только для организации списка и не влияет на публичный вызов.
| Режим | Когда использовать |
|---|---|
| Обычный текст | Строки без HTML-редактирования. |
| Rich text | Контент, который меняет редактор без работы с разметкой. |
| HTML | Управляемая разметка, теги полей, запросов и других блоков. |
| PHP | Небольшая проектная логика, которой действительно нужен серверный код. |
Переключение режима меняет редактор и способ обработки. PHP-код проходит проверку синтаксиса перед сохранением. Для большой или повторно используемой логики создавайте сервис и hook модуля.
Обычное право manage_blocks управляет HTML, rich text и plain text блоками.
Исполняемый режим дополнительно требует manage_php_blocks: без него PHP-блок
нельзя открыть, изменить, скопировать или восстановить из ревизии. Изменения
фиксируются в общем журнале аудита без записи исходного кода в событие.
Вставка в шаблон
Основной публичный тег использует alias:
[tag:sysblock:footer]
Старый [tag:block:...] поддерживается для совместимости, но новый код следует
писать через sysblock.
Блок может содержать:
[tag:request:latest_news]
[tag:sysblock:contacts]
[tag:fld:cover]
[tag:breadcrumb]
Поля документа доступны только когда блок рендерится в контексте документа.
Параметры
Параметры передаются JSON-объектом в теге:
[tag:sysblock:banner:{"theme":"dark","limit":4}]
Внутри блока значение читается так:
[sys:param:theme]
[sys:param:limit]
Не подставляйте параметр напрямую в SQL или исполняемый PHP без проверки типа и допустимых значений.
Внешний и AJAX-вызов
Флаг внешнего вызова разрешает получить блок отдельным публичным запросом. AJAX может дополнительно ограничить такой вызов ожидаемым режимом. Не включайте эти флаги для внутреннего блока без необходимости: внешний endpoint увеличивает публичную поверхность системы.
Вложенность и рекурсия
Блоки могут включать другие блоки, но не должны ссылаться сами на себя напрямую или по цепочке. Runtime останавливает повторный вход и ограничивает максимальную глубину, однако циклическая схема всё равно является ошибкой проекта.
Кеш и ревизии
После сохранения, копирования, удаления или восстановления система очищает кеш по ID и alias блока. Ручная очистка нужна после внешнего изменения БД или для диагностики.
Ревизии сохраняют содержимое и основные настройки. Перед восстановлением старой версии создаётся снимок текущей. Удаление всех ревизий не удаляет сам блок.
Проверка блока
- Выполните проверку синтаксиса.
- Сохраните и откройте страницу, где блок реально используется.
- Проверьте гостя и авторизованного пользователя, если есть условия доступа.
- Проверьте вложенные запросы и поля документа.
- Для внешнего блока отдельно проверьте запрещённый и разрешённый вызов.