Шаблон сайта в Битрикс — это «рамка» вокруг контента: шапка, подвал и подключение ассетов. Разберём обязательные файлы, папку /local/templates/, разделение на header и footer через рабочую область и правила выбора шаблона по условиям.
Структура папки шаблона
Шаблоны сайта хранятся в /local/templates/<код_шаблона>/ (приоритетно) или /bitrix/templates/. Минимальный набор файлов:
| Файл / папка | Назначение |
|---|---|
header.php | Верхняя часть до контента |
footer.php | Нижняя часть после контента |
.style.php | Описание стилей для визуального редактора |
styles.css / template_styles.css | CSS шаблона и контентных стилей |
components/ | Переопределённые шаблоны компонентов |
include/ | Включаемые области |
description.php задаёт имя и сортировку шаблона в админке, а .description.php может содержать превью-картинку screen.gif.Рабочая область: как делится страница
Ключевая идея шаблона — единственная точка разделения на шапку и подвал. Всё, что до вызова $APPLICATION->IncludeComponent(...) рабочей области, — это header.php, всё после — footer.php.
Обязательные маркеры в header.php:
<?php
use Bitrix\Main\Page\Asset;
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();
?>
<!DOCTYPE html>
<html><head>
<?php $APPLICATION->ShowHead(); // meta, CSS, JS-ядро ?>
<title><?php $APPLICATION->ShowTitle(); ?></title>
</head><body>
<?php $APPLICATION->ShowPanel(); // админ-панель ?>
<!-- шапка сайта -->
А в footer.php закрываются теги. Между ними ядро подставляет содержимое конкретной страницы. Метка конца рабочей области задаётся комментарием <!-- workarea --> для корректной работы визуального редактора.
Подключение стилей и скриптов
Правильное место для подключения ассетов — API \Bitrix\Main\Page\Asset, а не ручные теги <link>. Это даёт объединение и сжатие файлов, если оно включено в настройках.
Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . '/css/main.css');
Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . '/js/app.js');
Asset::getInstance()->addString('<meta name="theme-color" content="#fff">');
styles.cssподключается автоматически как основной стиль шаблона;template_styles.css— стили контентной области, доступные в визуальном редакторе;- константа
SITE_TEMPLATE_PATHдаёт путь к текущему шаблону без хардкода.
Asset::getInstance()->addJs(..., ['bundle' => true]) и настройки объединения CSS/JS в разделе оптимизации.Включаемые области и меню
Повторяющиеся редактируемые блоки (телефоны, слоганы, подвал) выносят во включаемые области — файлы, которые контент-менеджер правит через панель, не заходя в шаблон.
$APPLICATION->IncludeFile(
SITE_DIR . 'include/phone.php',
[],
['MODE' => 'html', 'NAME' => 'Телефон в шапке']
);
Меню подключается компонентом bitrix:menu с указанием типа меню (top, left) и шаблона меню, который тоже лежит в папке шаблона сайта. Так вся навигация настраивается без правки PHP-кода шапки.
Включаемые области бывают двух видов: файловые (по пути) и по свойству/разделу, когда контент подтягивается из инфоблока. Для режима визуального редактирования важно указать EDIT_MODE и корректный NAME — тогда рядом с блоком появляется карандаш редактирования. Константа SITE_DIR даёт корень текущего сайта, что критично при мультисайтовости, когда один шаблон обслуживает несколько сайтов с разными наборами включаемых областей.
Правила подключения шаблона
Один сайт может использовать несколько шаблонов, выбираемых по условиям. Настраивается это в Настройки → Сайты → Шаблоны сайта, где задаётся приоритет и условие показа.
| Условие | Пример |
|---|---|
| Папка/страница | Своя вёрстка для /personal/ |
| Тип периодики/раздел | Отдельный шаблон лендинга |
| GET-параметр | ?print=Y — версия для печати |
| PHP-условие | Мобильный шаблон по User-Agent |
Шаблоны проверяются сверху вниз по сортировке; применяется первый подошедший. Принудительно задать шаблон из кода можно так:
$APPLICATION->SetTemplate('print'); // до пролога, в init.php по условию
/local, обновления и переопределения
Шаблоны, как и компоненты, держат в /local/templates/. Каталог /local/ приоритетнее /bitrix/, поэтому переопределения безопасны при обновлениях платформы.
- папка
components/внутри шаблона перекрывает шаблоны типовых компонентов только в рамках этого шаблона сайта; - общие функции проекта выносят в
/local/php_interface/init.php, а не вheader.php; - служебный шаблон
.default(пустой) используют для системных страниц и почтовых событий.
header.php и footer.php отвечают за представление. Обработчики событий, автозагрузку классов и общие функции размещайте в init.php.Итог
Шаблон сайта — это header.php и footer.php, разделённые рабочей областью, плюс стили, включаемые области и переопределённые шаблоны компонентов. Ассеты подключают через Asset, логику держат в init.php, а всё кастомное — в /local/templates/. Выбор шаблона гибко управляется правилами по условиям.
Когда проекту нужны несколько шаблонов, аккуратная типизация вёрстки и корректная работа с ассетами под нагрузкой, мы в B2Bsite собираем структуру шаблонов так, чтобы её было легко поддерживать, обновлять и масштабировать.
Частые вопросы
Где проходит граница между header.php и footer.php?
Граница — это вызов компонента рабочей области на странице. Всё, что выводится до него, относится к header.php, всё после — к footer.php. Содержимое конкретной страницы ядро вставляет между ними.
Зачем нужен ShowHead и ShowPanel в header.php?
ShowHead выводит мета-теги, подключённые CSS и JS-ядро в секции head. ShowPanel отображает административную панель для авторизованных сотрудников. Без них ломается работа многих модулей и редактора.
Как правильно подключать CSS и JS шаблона?
Через \Bitrix\Main\Page\Asset — методы addCss и addJs с константой SITE_TEMPLATE_PATH. Это позволяет ядру объединять и сжимать файлы, в отличие от ручных тегов link и script.
Чем styles.css отличается от template_styles.css?
styles.css — основной файл стилей шаблона, подключается автоматически. template_styles.css содержит стили контентной области, которые доступны контент-менеджеру в визуальном редакторе.
Можно ли использовать несколько шаблонов на одном сайте?
Да. В настройках сайта задают несколько шаблонов с условиями показа — по папке, параметру, разделу или PHP-условию. Применяется первый подошедший по сортировке; можно задать шаблон и из кода через SetTemplate.
Куда выносить общие функции и обработчики событий?
В /local/php_interface/init.php, который подключается на каждой странице. Шаблон отвечает только за представление, поэтому бизнес-логику и регистрацию событий в header.php держать не стоит.
Почему шаблоны кладут в /local/templates, а не в /bitrix/templates?
Каталог /local приоритетнее /bitrix в цепочке поиска и не затирается при обновлении платформы. Это делает переопределения шаблонов безопасными и упрощает перенос между окружениями.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.