Представим узкую, но возможную на реальном проекте задачу — в стандартном шаблоне копроративного портала 1с-Битрикс изменить страницу, которая отвечает за вывод универсального списка в группе. По опыту работы с БУС и общим принципам устройства шаблонов компонентов сразу видится план:
— скопировать шаблон комплексного компонента;
— удалить из него все кроме нужной страницы, чтобы не терять обновления (почему так читаем тут);
— отредактировать нужную страницу.
Первая часть плана реализуется в несколько кликов — из визуального интерфейса «Эрмитажа» копируем шаблон комплексного компонента bitrix:socialnetwork_group.
Теперь нужно узнать имя файла, отвечающего за вывод универсального списка. Для этого на нужной странице нажимаем «Редактировать шаблон компонента»:
Сюрприз!
Да, мы узнали что файл называется group_lists.php. Но почему код обычной статической страницы? Где вызов компонента bitrix:lists.lists? Намеченное решение оказалось не таким уж простым, нужно искать дальше.
Лезем в код комплексного компонента bitrix:socialnetwork_group посмотреть, откуда же берется нужная нам страница. В функции подключения шаблона участвует массив $arCustomPagesPath, из которого видно, что файл group_lists.php лежит в ядре продукта /bitrix/modules/lists/socnet/. Правильность его нахождения именно там оставим на совести разработчиков:) Компонент редактировать очень не хочется, поэтому продолжаем исследование.
Интересует, прежде всего, массив $arCustomPagesPath. Повезло, что строится он при обработке события OnParseSocNetComponentPath (о котором официальная документация конечно же не знает).
$events = GetModuleEvents("socialnetwork", "OnParseSocNetComponentPath"); while ($arEvent = $events->Fetch()) ExecuteModuleEventEx($arEvent, array(&$arDefaultUrlTemplates404, &$arCustomPagesPath, $arParams));
Мы можем навесить свой обработчик с достаточно большой сортировкой в /bitrix/php_interface/init.php и удалить ненужное нам значение массива. Тогда файл будет подгружаться из шаблона комплексного компонента.
AddEventHandler("socialnetwork", "OnParseSocNetComponentPath", "MyOnParseSocNetComponentPath", 10000); function MyOnParseSocNetComponentPath($arFields, $arCustomPagesPath, $arParams) { unset($arCustomPagesPath["group_lists"]); }
Теперь можно удалить из шаблона комплексного компонента все лишнее и скопировать в него файл /bitrix/modules/lists/socnet/group_lists.php
Работает! :)
Больше статей и материалов по web-разработке в tg-канале - подписывайтесь!
Подписаться в telegram
Спасибо тебе! Сидел ломал голову откуда list.element.edit. Теперь всё понятно!