Как я кастомизировал портал

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Представим узкую, но возможную на реальном проекте задачу — в стандартном шаблоне копроративного портала 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($arEventarray(&$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

Работает! :)


Интересные статьи

Интересные статьи

Устали от постоянных звонков через Zoom и соскучились по живому общению? Как известно, современные проблемы требуют современных решений. Американский стартап PORTL Hologram предлагает сде...
Устраивать конкурсы в инстаграме сейчас модно. И удобно. Инстаграм предоставляет достаточно обширный API, который позволяет делать практически всё, что может сделать обычный пользователь ручками.
Приветствую вас (лично вас, а не всех кто это читает)! Сегодня мы: Создадим приложение (навык) Алисы с использованием нового (октябрь 2019) сервиса Yandex Cloud Functions. Настроим н...
Есть статьи о недостатках Битрикса, которые написаны программистами. Недостатки, описанные в них рядовому пользователю безразличны, ведь он не собирается ничего программировать.
Получить трафик для интернет-магазина сегодня не проблема. Есть много каналов его привлечения: органическая выдача, контекстная реклама, контент-маркетинг, RTB-сети и т. д. Вопрос в том, как вы распор...