Немного теории
При первом знакомстве может показаться, что у стандартных компонентов «1С-Битрикс: Управление Сайтом» настроек даже слишком много. Например, у компонента, выводящего список элементов инфоблока bitrix:news.list 49 параметров! При этом, в большинстве случаев, разработчик задает только ID инфоблока, количество на странице, список полей и свойств для вывода.
Но если речь идет про серьезную разработку с нестандартным поведением, даже этого количества параметров может не хватить. Например, для каждой новости в списке вывести список привязанных к ней событий в календаре компаний (другой инфоблок). Ни один стандартный шаблон компонента такую функцию выполнить не сможет. А значит, требуется его доработать.
В данном уроке вы узнаете о кастомизации шаблонов компонентов. Более серьезные способы доработки самого компонента будут рассмотрены дальше в курсе.
Напомним структуру шаблона компонента. Основные php-файлы:
- Обязательный файл шаблона. Для простых компонентов называется template.php, для комплексных название может быть иным (например, news.php или detail.php). В этом файле запрещено обращение к БД и сторонним сервисам, ответственность этого файла: вывести на экран html-шаблон на основе данных из $arResult и $arParams
- result_modifier.php. Главный друг разработчика, когда речь идет про доработку компонента в шаблоне. Если в $arResult нет нужных для template.php данных, именно тут нужно эти данные получить. В этом файле запрещен вывод html. Файл обрабатывается до template.php
- component_epilog.php. Похож на result_modifier.php, но обрабатывается после template.php и после завершения кеширования. Поэтому в этом файле допустимо манипулировать свойствами страниц или хлебными крошками.
- .parameters.php. Если новую логику result_modifier.php требуется параметризовать, то в этом файле должны быть описаны эти параметры для Эрмитажа компонента.
Обычная последовательность действий при доработке компонентов:
- Скопировать самый подходящий шаблон компонента в свой шаблон сайта (через Эрмитаж)
- Удалить из шаблона компонента все ненужное. Файлы стилей, сценарии JS, изображения и т.д.
- В result_modifier.php добавить все нужные для шаблона данные в $arResult
- Если требуется параметризация логики — объявить новые настройки в .parameters.php
- Доработать вывод html в template.php
- Если компонент должен не только выводить html — передать данные из result_modifier.php в component_epilog.php
Последовательность действий усложняется, если требуется изменить шаблон компонента, входящего в состав комплексного. Напомним, что в шаблонах таких компонентов, как bitrix:catalog и bitrix:news создана папка bitrix, в которой находятся шаблоны простых компонентов (например, bitrix:news.list или bitrix:catalog.section.list).
Таким образом, чтобы модифицировать вложенный шаблон простого компонента потребуется скопировать весь шаблон родительского комплексного компонента.
Примеры
// Для компонента bitrix:menu отметить внешние ссылки
foreach ($arResult as $i => $arItem) {
if (substr_count($arItem["LINK"], "https://")) {
$arResult[$i]["PARAMS"]["TARGET"]="_blank";
}
}
// Для компонента bitrix:catalog.section подготовка json
foreach ($arResult['ITEMS'] as $index => $arItem) {
$jsData = [];
$jsData['NAME'] = $arItem['NAME'];
$jsData['ID'] = $arItem['ID'];
if($arItem['PRODUCT']) {
$jsData['PRODUCT'] = [
'TYPE' => $arItem['PRODUCT']['TYPE'],
'AVAILABLE' => $arItem['PRODUCT']['AVAILABLE'],
'QUANTITY' => $arItem['PRODUCT']['QUANTITY']
];
}
$jsData['OFFERS'] = count($arItem['OFFERS']);
$arResult['JS_DATA'][] = $jsData;
}
Практика
В первом примере добавим на страницу новости ссылки на предыдущую и следующую новость. В стандартном news.detail информации для построения таких ссылок нет, получим её в result_modifier.php.
Доработка компонентов, пример 1
19 мин
Во втором примере заменим стандартный шаблон компонента на свой, сохраним функции "эрмитажа".
Доработка компонентов, пример 2
14 мин