config/ — конфигурации ассетов, шрифтов и схемы настроек
Каталог config/ в simai.data отвечает не за “значения настроек”, а за описание того, какие настройки вообще существуют и как их показывать/редактировать в интерфейсе SF4. На практике это два слоя:
- Схема (конфиг) — какие опции есть, их типы (строка/чекбокс/список/файл), дефолты, условия показа, шаблоны отображения в UI.
- Значения (property-файлы) — конкретные выбранные значения для сайта/раздела/страницы (см. отдельный подраздел про наследование).
Типовой пример схемы настройки (site-уровень): параметр выбора представления области grid_view_header — это список значений, который строится из папки с view, причём если у view есть превью, оно используется в интерфейсе выбора.
'grid_view_header' => [
'name' => Loc::getMessage("GRID_VIEW_HEADER"),
'type' => 'list',
'values' => \SIMAI\Main\Block\Section::getImageList(SF_DATA_DIR . "/grid/view/header"),
'default' => 'default',
'template' => 'sf4.image.list',
],
Отдельно в config/ может присутствовать .iblock.config.php — конфигурация вкладок/полей для форм редактирования инфоблоков (в том числе для публичного/расширенного редактирования). Это не значения, а именно “схема формы”: какие поля показывать и как их группировать.
template/ — проектная адаптация шаблона
template/ — это основная точка проектной кастомизации. Смысл простой: системный шаблон Bitrix остаётся стабильным и обновляемым, а проектные правки (layout, области, подключение кастомных стилей/скриптов, панели и режимы) живут в simai.data.
Ключевой файл — {site_dir}/simai.data/template/template.php: он становится “центром сборки страницы” на проекте и уже внутри подключает области, панели, свойства, стили, скрипты.
Типовые части, которые обычно живут рядом:
meta/— мета-разметка (title/description/OG и т.п.)style/иjs/— проектные ресурсыpanel/— элементы/шаблоны панели управления SF4 на сайтеproperty/— проектные шаблоны/переопределения вывода свойств (если используется такой подход в проекте)- вспомогательные файлы вроде
panel.php,property.php,style.php,js.php— как “точки подключения” к загрузчику/панели/настройкам
Главный принцип: ничего из системного шаблона не правится напрямую — все изменения делаются через simai.data/template.
grid/ — представления (view) и блоки (block)
grid/ — это место, где хранится “конструктор страницы” SF4:
grid/view/...— представления областей (header/footer/sidebar/main/top…)grid/block/...— блоки, из которых собираются области и контент
Важно зафиксировать ваш актуальный смысл термина view: в SF4 VIEW — это сохранённая конфигурация (набор параметров), а не “просто шаблон”. В текущей реализации это часто выглядит как готовый template.php внутри view-папки, который содержит полный вызов simai:sf.grid со всеми параметрами (а в более новых версиях — движение к раздельному сохранению по сущностям: страница/строка/блок).
Пример фрагмента view (область header) — внутри template.php вызывается simai:sf.grid, а структура области описывается параметрами ROW_*, COL_*, AREA_*:
$APPLICATION->IncludeComponent(
"simai:sf.grid",
".default",
[
"BLOCK_SECTION" => "header",
"ROW_COUNT" => "5",
"ROW_3_NAME" => "Меню",
"ROW_3_COL_0_AREA_0_TEMPLATE" => "menu.main",
// ...
]
);
То есть grid/view — это “пресеты сборки областей”, а grid/block — “кирпичи”, которые вставляются в AREA_*_TEMPLATE.
include/, modal/, lang/, image/ и overrides свойств
Эти каталоги — “инфраструктура проекта”, которая обычно ездит вместе с решением между средами:
include/— подключаемые области/фрагменты (в том числе для шаблона и блоков)modal/— модальные окна (шаблоны/контент модалок)lang/— проектные языковые файлы (для шаблона, view, блоков, панелей)image/— изображения проекта и служебные заглушки/превью (включая превью для выбора view в настройках)- overrides свойств — проектные переопределения шаблонов/поведения свойств (в зависимости от принятой структуры проекта это может быть
simai.data/propertyи/илиsimai.data/template/property)
Здесь важно не “раздуть” слой сайта случайными файлами: в simai.data имеет смысл хранить только то, что реально является артефактами решения и должно переноситься между dev/stage/prod.
Правило проекта: все правки и данные — в simai.data, ядро и системный шаблон не трогаются
Это правило удобно формулировать как контракт разработки:
-
ядро SF4 и системный шаблон можно обновлять
-
проектная логика/верстка/настройки не должны ломаться от обновлений
-
поэтому всё, что относится к проекту, живёт в
{site_dir}/simai.data:- настройки (значения) — в
.site.property.phpи.property.php - схемы настроек (что можно редактировать) — в
config/*.config.php - сборка областей — в
grid/view - проектные блоки — в
grid/block - проектный layout/панели/ресурсы — в
template/*
- настройки (значения) — в
Что важно учесть на практике в config/, template/ и grid/view|block
1) config/ — это не “где хранятся значения”, а “что вообще настраивается”. Значения лежат отдельными property-файлами. Поэтому когда “не находится настройка” — часто проблема не в значениях, а в том, что нужный параметр не объявлен в конфиге, и UI его просто не показывает.
2) template/ — это место, где включаются режимы SF4 (в том числе редактирование). У вас включение режима редактирования и режима редактирования гридов идёт через панель SF4 на сайте: сначала включается общий режим редактирования, после чего становится доступной кнопка режима редактирования гридов.
3) В grid/view и grid/block лежат не только “конфиги”, но и PHP-шаблоны. Минимальная структура view-папки в проекте выглядит так:
template.php— реализация (часто полный вызовsimai:sf.gridс параметрами).description.php— метаданные (имя/описание/сортировка/версия/превью)lang/ru/.description.php— локализация метаданныхimage/preview.png— превью (опционально; если нет — в UI можно показывать списком)
А минимальная структура блока (пример custom.button) выглядит так:
template.php— вывод HTML.parameters.php— список параметров блока и дефолты.description.php— метаданные (если используется)
Пример того, как блок берёт параметры (ключи формируются из кода папки блока, приведённого к верхнему регистру):
<?php
$nameTemplate = strtoupper(basename(__DIR__));
?>
<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>