Здесь размещаются все пользовательские изменения шаблона: style/, js/, meta/, panel/, property/, основной template.php
В SF4 системный шаблон simai.framework — это стабильная “точка входа” Bitrix. Он подключает модуль фреймворка и делегирует сборку страницы в проектный слой, включая файл:
{site_dir}/simai.data/template/template.php
Причём включение происходит и из header.php, и из footer.php системного шаблона. Поэтому проектный template.php в реальном проекте работает как единый layout-файл, который отрабатывает в две фазы: первый запуск формирует верх страницы (head/body/каркас), второй — закрывает разметку и подключает “хвост” (footer/нижние области). В вашей реализации это сделано через внутренний маркер SF_SITE_HEADER и ветку футера.
Внутри template.php сразу выделены понятные “точки кастомизации” — отдельные файлы, которые легко сопровождать:
property.php— сбор и нормализация свойств/настроек страницы (site/section/page/user) и подготовка производных параметров для layout.panel.php— добавление кнопок/меню в панель Bitrix (как правило, только для администратора).style.php,js.php— подключение CSS/JS проекта.meta.php— дополнительные meta/служебные вставки (обычно в конце, но зависит от принятой схемы).
Добавление/изменение панелей и областей — через файлы в simai.data/template/panel и simai.data/template/area
Панель (panel.php). В вашей схеме panel.php добавляет кнопки в панель Bitrix через $APPLICATION->AddPanelButton(...) и выполняется только для администратора. Это правильный паттерн: панель — инструмент редактора/админа, и её логика не должна работать для всех пользователей.
Минимальный “скелет” добавления кнопки выглядит так:
$APPLICATION->AddPanelButton([
'ID' => 'my_button',
'TEXT' => 'Моя кнопка',
'MAIN_SORT' => 1510,
'SORT' => 10,
'ICON' => 'bx-panel-my-icon',
'HREF' => "javascript:window.open('/my/url/')",
]);
Области (include-area). Области подключаются из проектного template.php по коду, например:
<?IncludeArea::includeTemplateArea("sidebar/left");?>
Код области напрямую соответствует пути к файлу области. В вашем проекте каноничный формат такой:
{site_dir}/simai.data/template/area/<area_code>/template.php
Например, для области sidebar/right путь будет:
{site_dir}/simai.data/template/area/sidebar/right/template.php
Чтобы добавить новую область (например, promo/top), делаете ровно как с существующими:
- создаёте файл
{site_dir}/simai.data/template/area/promo/top/template.php - добавляете в layout вызов
IncludeArea::includeTemplateArea("promo/top")в нужном месте.
Подключение ассетов: через {site_dir}/simai.data/config/.asset.config.php + физические файлы в simai.data/template/style|js
В SF4 удобно держать два уровня управления ресурсами:
- Конфигурация подключений (какие пакеты, зависимости, порядок) — в
{site_dir}/simai.data/config/.asset.config.php. - Фактические точки подключения — в проектном шаблоне, обычно через
{site_dir}/simai.data/template/style.phpи{site_dir}/simai.data/template/js.php.
Такой подход даёт предсказуемость: вы не “размазываете” подключения по системным файлам, а централизуете правила в проектном слое.
Если ассет относится к конкретному проекту, его нормальное место — в слое сайта (simai.data) и/или в подключаемых проектных файлах шаблона, а не в /simai и не в системном Bitrix-шаблоне.
Перед правками свериться с деревом структуры и принятой схемой подключений
Перед тем как добавлять новые области/панели/ассеты, самый надёжный способ “не промахнуться” — действовать по уже работающему паттерну проекта:
- область добавляем только в
simai.data/template/area/...и подключаем только черезIncludeArea::includeTemplateArea(...)вsimai.data/template/template.php; - свойства/layout-параметры формируем в
property.php, а используем уже готовые значения вtemplate.phpчерез чтение свойств (например, классы<body>и параметры layout); - кнопки панели правим в
panel.php, сохраняя ограничение “только для администратора”.
Чтобы было понятно, что именно делает property.php (это полезно при кастомизации layout), в вашей реализации он:
- собирает значения из
/.site.property.php,Section::getRecursionArray(),Page::getArray(), пользовательского storage"user"и глобального$GLOBALS["SF_PROPERTY"]; - принудительно выключает
development_modeдля не-админов; - вычисляет производные CSS-классы layout (
layout_pagewrap,layout_container,layout_container_size) и ширину main-колонки в зависимости от сайдбаров; - сохраняет итог в хранилище свойств для сайта (
Property::setArray(SF_SITE_DIR, ...)); - применяет SEO/заголовки через
$APPLICATION->SetTitle()и$APPLICATION->SetPageProperty().
Если после правки “не применилось”, почти всегда причина одна из трёх:
- файл лежит не по ожидаемому пути (
area/.../template.php,template/style.php, и т.д.); - забыли добавить точку подключения в
template.php; - значение записано не на том уровне (site/section/page/user) и перекрывается нижестоящим уровнем.