Шаблон сайта в Битрикс: 7 шагов и частые ошибки новичков
За 30–40 минут вы соберёте в /local/templates рабочий шаблон для Битрикса: с ShowHead, админ-панелью и телефоном во включаемой области. По пути разберём ошибки, из-за которых правки пропадают, а стили не грузятся.

Через 30–40 минут у вас будет шаблон сайта на «1С-Битрикс: Управление сайтом». Он лежит в /local/templates, выводит админ-панель и стили компонентов, а телефон в шапке меняется из публичной части без правки PHP. Заодно обойдёте ошибки, на которых новички теряют вечер: правки не в той папке, статичные теги вместо методов платформы, забытые вызовы в header.php.
Что нужно до начала
- Редакция «Управление сайтом» 23.x или 24.x. В других версиях названия пунктов админки могут отличаться, сверяйтесь с документацией.
- Права администратора и доступ к файлам: SFTP, SSH или раздел «Контент → Структура сайта → Файлы и папки».
- Свежая резервная копия («Настройки → Инструменты → Резервное копирование») или тестовая копия сайта.
Пошаговая инструкция
Шаблон Битрикса состоит из двух файлов: header.php и footer.php. Содержимое страницы платформа вставляет между ними.
Создайте папку
/local/templates/mysite/css. Если /local нет, создайте и её. Битрикс ищет шаблоны сначала в /local/templates, потом в /bitrix/templates.Проверка: папка видна по SFTP или в файловом менеджере.
Создайте
/local/templates/mysite/header.php. Строку с die() не удаляйте: она закрывает файл от прямого вызова по URL. ShowHead() выводит метатеги, стили и скрипты платформы и компонентов, ShowPanel() выводит панель администратора.<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die(); } // Стили подключаем через Asset: Битрикс выведет их в ShowHead() \\Bitrix\\Main\\Page\\Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . "/css/main.css"); ?> <!DOCTYPE html> <html lang="ru"> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <title><?php $APPLICATION->ShowTitle(); ?></title> <?php $APPLICATION->ShowHead(); ?> </head> <body> <?php $APPLICATION->ShowPanel(); ?> <header class="site-header"> <a class="site-header__logo" href="<?= SITE_DIR ?>">Мой сайт</a> <span class="site-header__phone"> <?php $APPLICATION->IncludeComponent( "bitrix:main.include", "", array( "AREA_FILE_SHOW" => "file", "PATH" => SITE_DIR . "include/phone.php", ), false ); ?> </span> </header> <main class="site-content"> <h1><?php $APPLICATION->ShowTitle(false); ?></h1>Проверка: команда ниже (замените путь на корень вашего сайта) выводит «No syntax errors detected». Без SSH пропустите проверку, она будет на шаге 7.
php -l /var/www/site/local/templates/mysite/header.phpСоздайте
/local/templates/mysite/footer.php. Тег main открыт в header.php и закрывается здесь. Незакрытый или лишний тег между двумя файлами ломает вёрстку на всех страницах.<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) { die(); } ?> </main> <footer class="site-footer"> <p>© <?= date("Y") ?> Мой сайт</p> </footer> </body> </html>Проверка: та же команда
php -lдля footer.php.Создайте
/local/templates/mysite/css/main.css..site-header, .site-footer { display: flex; justify-content: space-between; padding: 16px 24px; background: #eef1f5; } .site-content { max-width: 960px; margin: 0 auto; padding: 24px; }Проверка: адрес https://ваш-сайт/local/templates/mysite/css/main.css показывает текст стилей.
Создайте в корне сайта файл
/include/phone.phpс одной строкой+7 (000) 000-00-00. Это включаемая область, пояснение ниже.Проверка: https://ваш-сайт/include/phone.php показывает номер.
Создайте в корне сайта страницу
/test.php. Пока она работает на старом шаблоне.<?php require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php"); $APPLICATION->SetTitle("Проверка шаблона"); ?> <p>Если вы видите шапку, телефон и подвал, шаблон подключён.</p> <?php require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>Проверка: /test.php открывается, виден абзац с текстом.
Откройте «Настройки → Настройки продукта → Сайты → Список сайтов», выберите сайт и в блоке «Шаблоны сайта» добавьте mysite. В поле условия впишите
CSite::InDir('/test.php'), а сортировку поставьте выше старого шаблона (число меньше). Битрикс берёт первый шаблон, чьё условие выполнилось, поэтому остальные страницы останутся на старом шаблоне.Проверка: на /test.php видны шапка, телефон и подвал, а у авторизованного администратора вверху панель. В исходном коде страницы (Ctrl+U) есть ссылка на /local/templates/mysite/css/main.css, после .css может идти числовой параметр версии.
Сноска. Включаемая область: файл с фрагментом контента (телефон, адрес, копирайт), который шаблон подключает компонентом bitrix:main.include. Контент-менеджер правит его в публичной части и не трогает код шаблона.
Всё, что лежит в /bitrix, принадлежит платформе и готовым решениям. Всё, что написали вы, живёт в /local.
Что писать в шаблоне, а что нет
| Задача | Как правильно | Частая ошибка |
|---|---|---|
| Название вкладки | $APPLICATION->ShowTitle() внутри <title> | Статичный текст, одинаковый на всех страницах |
| Заголовок H1 | $APPLICATION->ShowTitle(false) | Текст, прописанный в вёрстке |
| Стили | Asset::getInstance()->addCss(SITE_TEMPLATE_PATH . '/css/main.css') | Тег <link> с жёстким путём |
| Скрипты | Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . '/js/main.js') | Тег <script> в конце footer.php |
| Картинки | SITE_TEMPLATE_PATH . '/images/logo.svg' | Относительный путь ../images/logo.svg, он ломается на вложенных страницах |
| Телефон, адрес | Компонент bitrix:main.include | Текст в header.php: менять его сможет только разработчик |
| Ресурсы платформы | ShowHead() в head, ShowPanel() в body | Забыть один из вызовов |
Если не получилось
- Белая страница или «Parse error: Unclosed '{'» (на PHP 7.x: «syntax error, unexpected end of file»). В header.php или footer.php не закрыта скобка или пропущен
?>. Запуститеphp -lна обоих файлах. Для отладки включите debug в секции exception_handling файла /bitrix/.settings.php и после работы верните false. - Страница открылась, стилей нет. В DevTools на вкладке Network найдите main.css. Если он отдаёт 404, проверьте путь и регистр букв: на Linux css и Css разные папки. Если запроса нет вовсе, в head пропущен ShowHead().
- Нет админ-панели. Либо ShowPanel() не стоит сразу после открывающего body, либо вы не авторизованы на этом домене.
- Правки сделаны, на сайте всё по-старому. Обновите страницу через Ctrl+F5, затем сбросьте кеш Битрикса (раздел «Настройки → Производительность»). Если включены композитный сайт или объединение CSS и JS, на время правок отключите их: страница может отдаваться из кеша.
- Шаблона нет в списке или открывается старый. header.php должен лежать прямо в /local/templates/mysite, а не в подпапке. Если шаблон в списке есть, а работает старый, проверьте условие и сортировку из шага 7.
Что делать дальше
Перенесите свою вёрстку: всё до места, где начинается содержимое страницы, идёт в header.php, остальное в footer.php. Шаблоны компонентов копируйте в /local/templates/mysite/components/, это отдельная тема. Когда тестовая страница вас устроит, очистите поле условия, чтобы шаблон применялся ко всему сайту. В первые сутки после переключения смотрите журнал ошибок PHP и убедитесь, что debug в /bitrix/.settings.php выключен.
Логотип и фирменный стиль: Три концепции разного характера, палитра с обоснованием, проверка на читаемость в малом размере и в один цвет.
Спросить за 60 ₽Источники: Документация 1С-Битрикс для разработчиков, Курс «Разработчик Bitrix Framework» на dev.1c-bitrix.ru
Частые вопросы
Почему нельзя править шаблон прямо в /bitrix/templates?
У меня старая версия Битрикса, папки /local нет. Что делать?
Сделал всё по инструкции, но не работает. С чего начать?
Можно ли подключать стили обычным тегом link?
Что проверить перед включением шаблона на боевом сайте?
Можно ли сделать разные шаблоны для главной и каталога?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.