Шаблон компонента
Шаблоны компонента делятся на системные и пользовательские:
- Системные шаблоны поставляются вместе с компонентом и лежат в подпапке
templates
папки компонента - Пользовательские шаблоны компонента — шаблоны, которые изменены под нужды конкретного сайта. Они должны лежать в
папках шаблонов сайтов (т.е. в
/local/templates/шаблон-сайта/
)
При копировании шаблона компонента средствами системы, они будут расположены по следующему пути:
/local/templates/имя-шаблона-сайта/components/namespace/имя-компонента/имя-шаблона-компонента
Шаблоны компонента определяются по именам. Шаблон по умолчанию имеет имя .default
. Если в настройках
параметра компонента не указывается имя шаблона, вызывается шаблон по умолчанию.
Шаблоны компонента могут быть папками или файлами. Если шаблону не требуется перевод на другие языки, собственные стили и прочие ресурсы, такой шаблон можно расположить в файле. В противном случае шаблон следует располагать в директории.
Шаблон простого компонента
Директория шаблона простого компонента может содержать следующие директории и файлы:
- Файл
template.php
, который и является собственно шаблоном; этот файл должен обязательно присутствовать. - Файл
result_modifier.php
, который подключается непосредственно перед подключением шаблона компонента. Этот файл получает на вход массив результатов работы компонента$arResult
и массив параметров вызова компонента$arParams
. Таким образом, можно, например, изменить массив результатов работы компонента под конкретный шаблон. - Файл
component_epilog.php
, который подключается после исполнения шаблона. - Файл
style.css
, который определяет стили, необходимые данному шаблону. - Файл
script.js
, который определяет и подключает javascript, необходимые данному шаблону. - Файл
.description.php
, который содержит название и описание шаблона для визуального редактора. - Файл
.parameters.php
, который содержит описание дополнительных входных параметров шаблона для визуального редактора. - Директорию
lang
, в которой расположены файлы языковых сообщений (переводов) шаблона компонента. - Любые другие директории и файлы с ресурсами, необходимыми шаблону компонента. Например, директорию
image
, содержащая изображения, необходимые шаблону.
Шаблон комплексного компонента
Шаблон комплексного компонента содержит все те же папки, что и шаблон простого компонента, и дополнительно:
- Шаблоны простых компонентов, которые входят в состав комплексного. Эти шаблоны располагаются в папках вида
/namespace/component/
относительно папки шаблона комплексного компонента - Простые компоненты, входящие в состав комплексного, подключаются на шаблонах страниц комплексного компонента
Как система ищет шаблон
- Система сначала ищет шаблон компонента в папке
/local/templates/текущий-шаблон-сайта/components/
; - Если там шаблон не найден, то берётся папка
/local/templates/.default/components/
; - Если шаблон не найден, то производится поиск среди шаблонов, поставляемых с компонентом:
1) если это нативный компонент Битрикс, то поиск идет в папке/bitrix/components/bitrix/
2) если это самописный компонент, то поиск идет в папках/local/components/ivanov/
и/bitrix/components/ivanov/
Особенности поиска:
- Если имя шаблона не задано, то ищется шаблон с именем
.default
- Если шаблон задан именем папки, то в случае простого компонента в этой папке ищется файл
template.php
, а в случае комплексного —page-name.php
Если простой компонент вызывается в составе комплексного, то шаблон простого компонента сначала ищется в составе
шаблона комплексного компонента, а потом (если не найден) в собственных шаблонах. Чтобы это правило работало, при
вызове простых компонентов в составе комплексного не забывайте указывать четвертым параметром переменную
$component
, указывающую на родительский компонент:
$APPLICATION->IncludeComponent(
"bitrix:catalog.filter",
"",
array(
// ..........
),
$component
);
Подключение шаблона
Ядро сначала проверяет наличие шаблона компонента в шаблоне текущего сайта:
/local/templates/имя-шаблона-сайта/components/namespace/имя-компонента/имя-шаблона-компонента/template.php
Если файла шаблона нет, проверяется шаблон сайта по умолчанию:
/local/templates/.default/components/namespace/имя-компонента/имя-шаблона-компонента/template.php
И только после этого происходит подключение шаблона компонента из папки компонента.
Если namespace
— bitrix
(/bitrix/components/bitrix/
), то это папка для
шаблонов стандартных компонентов. Если namespace
— выбранное разработчиком пространство имен
(/local/components/ivanov/
или /bitrix/components/ivanov/
), то это папка для шаблонов
самописных компонентов.
Шаблон в файле компонента component.php
подключается командой где $templatePage
:
- Для комплексного компонента — имя текущей страницы
- Для обычного компонента — пустая строка
$this->IncludeComponentTemplate($templatePage = "");
Вызов компонента
При вызове компонента указываются:
- Пространство имен + имя компонента:
namespace:component
; - Имя шаблона, если пустая строка — подразумевается
.default
; - Параметры самого компонента
- Объект родительского комплексного компонента, если компонент подключается из шаблона комплексного компонента. В
шаблоне комплексного компонента определена переменная
$component
, которая содержит объект этого комплексного компонента - Массив, содержащий дополнительные параметры отображения компонента:
"HIDE_ICONS"=>"Y"
— не показывать панель настройки компонента в режиме редактирования/разработки
"ACTIVE_COMPONENT"=>"N"
— отключить компонент (код компонента не подключается)
mixed IncludeComponent(
string componentName,
string componentTemplate,
array arParams=array(),
object parentComponent=null,
array arFunctionParams=array()
);