Перейти к содержимому

Включаемые области - файлы, области шаблона, правка менеджером

Выносим повторяющиеся куски страниц в области: телефон в шапке, текст под каталогом, баннер раздела - всё то, что меняет контент-менеджер без разработчика.

Решение

Выводим включаемую область:

$APPLICATION->IncludeFile('/include/phone.php', [], ['MODE' => 'html']);
// путь считается от корня сайта, а не от каталога шаблона
// файл живёт рядом с сайтом и правится из режима редактирования
// третий аргумент включает кнопку правки прямо на странице

Включаемая область - это обычный файл, подключённый особым вызовом. Особый он тем, что платформа знает про этот файл и умеет показать рядом с ним кнопку правки для контент-менеджера.

Делаем область на раздел:

$APPLICATION->IncludeComponent('bitrix:main.include', '', [
'AREA_FILE_SHOW' => 'sect', // область раздела, а не одной страницы
'AREA_FILE_SUFFIX' => 'inc', // ищется файл sect_inc.php
'AREA_FILE_RECURSIVE' => 'Y', // если своего нет, берётся от родителя
'EDIT_TEMPLATE' => 'standard.php',
]);

Область раздела ищется вверх по дереву каталогов. Один текст, положенный в корень каталога, показывается во всех его разделах, а раздел со своим файлом перекрывает общий.

Передаём блок из середины страницы в шапку:

// в шаблоне компонента или на самой странице
$APPLICATION->SetViewTarget('under_title');
echo '<div class="promo">Бесплатная доставка от 3000 рублей</div>';
$APPLICATION->EndViewTarget();
// а в шаблоне сайта, выше по странице
$APPLICATION->ShowViewContent('under_title');

Содержимое отдаётся туда, где его показывают, независимо от порядка на странице. Это и есть способ вывести данные компонента в шапке, не таща запрос к базе в шаблон сайта.

Отдаём область контент-менеджеру:

- файлы областей лежат вне каталога платформы и переживают обновление
- у группы контент-менеджеров должно быть право на запись в этот каталог
- режим редактирования показывает кнопку правки прямо на странице

Правку области менеджер делает сам, из режима редактирования сайта. Если кнопка не появляется, дело почти всегда в правах на каталог, а не в самом вызове.

Одинаковые области стоит заводить одним файлом, а не копией на каждой странице. Телефон, продублированный в двенадцати областях, меняется ровно до тех пор, пока кто-нибудь не найдёт тринадцатую.

Область с PHP-кодом внутри выглядит удобно и стареет плохо. Всё, что сложнее разметки, живёт в компоненте, а область остаётся текстом, который безопасно править без разработчика.

Список областей проекта полезно держать в описании. Через год никто не помнит, какой файл рисует текст под каталогом, и правку начинают с поиска по всему сайту.

Типичные проблемы

Область поправили, а на сайте старый текст.

Страница отдаётся из кэша компонента или из композитной копии страницы. Кэш сбрасывают после правки области.

В нужном месте выводится пустота.

Содержимое области отдаётся условием, которое на этой странице не выполняется. Проверяют сам факт вызова, а не только вывод.

Кнопка правки не появляется у менеджера.

У его группы нет права на запись в каталог с файлами областей. Права проверяют на каталоге, а не на странице.

После обновления продукта области исчезли.

Их файлы лежали внутри каталога самой платформы. Такие файлы обновление возвращает в исходный вид.

Текст раздела показывается не во всех подразделах.

Область заведена без поиска вверх по дереву каталогов. Тогда каждый подраздел требует своего файла.

Частые вопросы

Чем это лучше обычного подключения файла?

Платформа знает про такой файл и даёт кнопку правки менеджеру. Обычное подключение этого не умеет.

Где хранить файлы областей?

В своём каталоге рядом с сайтом, вне каталога платформы. Тогда они переживут обновление продукта.

Можно ли класть в область PHP-код?

Технически да, но менеджер её потом не поправит. Логику держат в компоненте, а область оставляют текстом.

Как показать данные компонента в шапке?

Отдать их областью шаблона из компонента и показать выше по странице. Порядок на странице при этом не важен.

Смежное

Первоисточник