[spoiler]
Лично я склонен обходиться без кастомизации там, где в этом нет особой необходимости. Всегда приятно после обновления получить новый функционал без дополнительных трудозатрат (преимущество 1). Рекомендую следовать этому правилу чтобы легче решать проблемы через техподдержку (2) (поддержка не занимается решением проблем, возникающих в работе своего кода если явно не обозначена ошибка в работе АПИ). Кроме того, в комплексных компонентах стандартно реализован AJAX (3).
В качестве примера взял компонент соцсети. Задача: заменить форму редактирования описания группы (textarea) на визуальный редактор с возможностью вставки html (должен отметить, что затем придётся менять шаблон компонента вывода описания чтобы не экранировались теги html, но решение аналогичное и выходит за рамки статьи).
Как работает подключение шаблона
Для подключения шаблона компонента 2.0 действует тот же принцип, что был у первых компонентов. В коде подключения указывается только <namespace>, имя компонента, имя шаблона (и параметры самого компонента). При обработке кода ядро сначала проверяет наличие шаблона компонента в шаблоне текущего сайта. Папка
/bitrix/templates/<имя шаблона сайта>/components/<namespace>/<имя компонента>/<имя шаблона>/template.php |
<namespace> - "bitrix" для стандартных компонентов, и выбранное вами <имя> для своих, лежащих в /bitrix/components/<имя>
Если файла шаблона нет, проверяется шаблон сайта по умолчанию
/bitrix/templates/.default/components/<namespace>/<имя компонента>/<имя шаблона>/template.php |
И только после этого происходит подключение шаблона компонента из папки компонента.
Как сделать
Чтобы не мудрить с правильным положением файла:
- Переходим в режим разработки.
- Открываем нужную страницу комплексного компонента.
- Здесь есть несколько опций для настройки: 1 - настройка комплексного компонента, 2 и 3 - простые компоненты. Выбираем нужный компонент и выбираем копирование шаблона (4). Обратите внимание, что настроить параметры компонента в составе сложного нельзя, они определяются комплексным компонентом на основе собственных параметров.
- Выбираем шаблон сайта и сохраняем.
Теперь на основе
<textarea name="GROUP_DESCRIPTION" style="width:98%" rows="5"><?= $arResult["POST"]["DESCRIPTION"]; ?></textarea> |
на
<input type=hidden name="GROUP_DESCRIPTION"><? $GLOBALS['APPLICATION']->IncludeComponent( "bitrix:fileman.light_editor", ".default", Array( "CONTENT" => htmlspecialchars_decode($arResult["POST"]["DESCRIPTION"]), "INPUT_NAME" => "GROUP_DESCRIPTION", "WIDTH" => "98%", "HEIGHT" => "200px", "USE_FILE_DIALOGS" => "N", "FLOATING_TOOLBAR" => "N", "ARISING_TOOLBAR" => "N", "VIDEO_ALLOW_VIDEO" => "N", ) ); ?> |
Получаем результат:
При этом весь остальной код остаётся стандартный, т.е. будет обновляться и поддерживаться командой битрикса.
Фото:
P.S. Евгений, формулируйте вопрос более полно.
Перечитав еще раз сам пост, я понял, что имелся ввиду частный случай кастомизации шаблона простого компонента, входящего в комплексный. Поскольку такое решение проблемы для меня совершенно нетипично, и последовал вопрос.
P.S. Так достаточно полно?