home chevron_right
Блоки и area-шаблоны: `{site_dir}/simai.data/grid/block` и параметры из view

Блок как единица вывода: выбор по коду, размещение в grid/blocklink

В SF4 блок — это повторно используемая единица вывода, которая подключается по коду (а не по ID). Блоки лежат в проектном слое сайта в каталоге:

  • {site_dir}/simai.data/grid/block/<section>/<block_code>/

Где <section> — логическая секция (например header, sidebar, main), а <block_code> — код конкретного блока (например custom.button). Такой формат удобен тем, что блоки:

  • легко переносить между средами вместе с проектом;
  • можно переопределять без правок ядра;
  • можно подключать в разных местах через разные VIEW, передавая им разные параметры.

На практике “правильный” вопрос при диагностике всегда один: какой код блока указан в view и существует ли для него реализация в grid/block.

Area-шаблоны внутри view: ...AREA_*_TEMPLATE (например page.title, menu.sidebar)link

Внутри VIEWgrid/view/.../<view_code>/template.php) блоки подключаются через area-шаблоны. Это задаётся параметрами вида:

  • ROW_<row>_COL_<col>_AREA_<n>_TEMPLATE

Значение такого параметра — код area-шаблона (например page.title, menu.sidebar, banner.list, custom.button). Смысл такой:

  • VIEW описывает композицию (строки/колонки/какие блоки где стоят),
  • а конкретная реализация блока находится в grid/block/....

То есть ...AREA_*_TEMPLATE — это “ссылка” на блок по коду, а не сама вёрстка.

Прокидывание параметров в area-шаблоны: __AREA_CODE__PARAM (например PAGE_TITLE, BANNER_LIST)link

VIEW не только выбирает, какой блок вывести, но и передаёт в него параметры. Технически эти параметры приходят в блок в виде массива свойств ($arBlockProperty), и блок сам читает их по ключам.

Важный практический момент SF4: префикс параметров задаётся реализацией блока. Поэтому самый надёжный способ понять, как правильно передавать параметры в конкретный блок — смотреть, какие ключи возвращает файл параметров блока и какие ключи читает template.php.

Эталонный пример из проекта — блок:

  • {site_dir}/simai.data/grid/block/header/custom.button

Он вычисляет префикс параметров так:

$nameTemplate = strtoupper(basename(__DIR__)); // CUSTOM.BUTTON

И ожидает ключи вида:

  • CUSTOM.BUTTON__BUTTON_LINK
  • CUSTOM.BUTTON__BUTTON_TEXT
  • CUSTOM.BUTTON__BUTTON_TARGET__BLANK
  • CUSTOM.BUTTON__BUTTON_MODIFIER

Сам вывод блока — обычная ссылка, целиком управляемая этими параметрами:

<a
    class="<?=$arBlockProperty[$nameTemplate . "__BUTTON_MODIFIER"]?>"
    href="<?=$arBlockProperty[$nameTemplate . "__BUTTON_LINK"]?>"
    target="<?=$arBlockProperty[$nameTemplate . "__BUTTON_TARGET__BLANK"] == "Y" ? "_blank" : "_self" ?>"
>
    <?=htmlspecialcharsBack($arBlockProperty[$nameTemplate . "__BUTTON_TEXT"])?>
</a>

Как это выглядит при подключении из VIEW: вы ставите custom.button как ...AREA_*_TEMPLATE и рядом задаёте параметры с префиксом CUSTOM.BUTTON:

"BLOCK_SECTION" => "header",

"ROW_0_COL_0_AREA_0_TEMPLATE" => "custom.button",
"ROW_0_COL_0_AREA_0__CUSTOM.BUTTON__BUTTON_TEXT" => "Подать заявку",
"ROW_0_COL_0_AREA_0__CUSTOM.BUTTON__BUTTON_LINK" => "/apply/",
"ROW_0_COL_0_AREA_0__CUSTOM.BUTTON__BUTTON_TARGET__BLANK" => "N",
"ROW_0_COL_0_AREA_0__CUSTOM.BUTTON__BUTTON_MODIFIER" => "btn btn-outline-primary",

Такой подход делает VIEW “оркестратором”, а блок — переиспользуемым кирпичиком: один и тот же блок можно подключать в разных областях, меняя только параметры.

Переопределение блоков: проектная версия в simai.data, ядро не трогатьlink

Правило разработки решений на SF4: ядро и системные реализации не правим, изменения делаем в проектном слое.

Типовой сценарий переопределения блока выглядит так:

  1. Определить код блока, который используется в VIEW (значение ...AREA_*_TEMPLATE).
  2. Создать/изменить реализацию блока в {site_dir}/simai.data/grid/block/... (тот же код и секция).
  3. Если блоку нужны настраиваемые параметры — описать их в .parameters.php блока (чтобы они появились в UI редактирования) и читать их в template.php через $arBlockProperty.
  4. Стили и скрипты блока добавлять проектно (обычно через {site_dir}/simai.data/template или через конфигурацию ассетов проекта — в зависимости от принятой у вас схемы подключения).

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