home chevron_right
Кастомизация: {site\_dir}/simai.data/template

Здесь размещаются все пользовательские изменения шаблона: style/, js/, meta/, panel/, property/, основной template.phplink

В 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/arealink

Панель (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), делаете ровно как с существующими:

  1. создаёте файл {site_dir}/simai.data/template/area/promo/top/template.php
  2. добавляете в layout вызов IncludeArea::includeTemplateArea("promo/top") в нужном месте.

Подключение ассетов: через {site_dir}/simai.data/config/.asset.config.php + физические файлы в simai.data/template/style|jslink

В SF4 удобно держать два уровня управления ресурсами:

  1. Конфигурация подключений (какие пакеты, зависимости, порядок) — в {site_dir}/simai.data/config/.asset.config.php.
  2. Фактические точки подключения — в проектном шаблоне, обычно через {site_dir}/simai.data/template/style.php и {site_dir}/simai.data/template/js.php.

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

Если ассет относится к конкретному проекту, его нормальное место — в слое сайта (simai.data) и/или в подключаемых проектных файлах шаблона, а не в /simai и не в системном Bitrix-шаблоне.

Перед правками свериться с деревом структуры и принятой схемой подключенийlink

Перед тем как добавлять новые области/панели/ассеты, самый надёжный способ “не промахнуться” — действовать по уже работающему паттерну проекта:

  • область добавляем только в 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) и перекрывается нижестоящим уровнем.