Как добавить свой пункт меню в Рабочей группе на портале
меню рабочей группы
Требуется: добавить туда какой-либо свой пункт.
Для упрощения задачи - будем добавлять наш пункт последним.
В нашем примере - это пункт "Трудозатраты", по нажатию на который мы должны перейти по адресу /timetrack/group/ID группы/
Решение:
Задача не такая тривиальная.как представляется на первый взгляд. Меню группы строится компонентом bitrix:socialnetwork.group в зависимости от настроек данной группы, сам компонент подключается внутри комплексного компонента bitrix:socialnetwork_group . Таким образом - чтобы поменять меню группы, надо кастомизировать два компонента - а это влечет за собой разрыв со всеми дальнейшими обновлениями "родных" компонентов Битрикс.
Поэтому решать будем иначе - перехватывая событие формирования страницы.
Код подвесим на событие OnAfterEpilog модуля main.
RegisterModuleDependences('main', "OnAfterEpilog", "mymodule", "MyClass", "addMenuLink", 1); |
Событие OnAfterEpilog не имеет параметров, но генерируется в тот момент, когда код страницы (включая все отложенные функции) уже сгенерирован.
Чтобы понять, что следует писать в нашу функцию, посмотрим этот код внимательно:
Очевидно, что нам нужно найти тег profile-menu-filter и добавить к нему дочерний элемент в виде нашего пункта меню.
Итак, код функции выглядит следующим образом:
function addMenuLink() { global $APPLICATION; $page = $APPLICATION->GetCurPage(); $url = preg_match("(/workgroups/group/([0-9]+)/)",$page, $matches); if ($url) { ?>
$(function() { if (document.getElementById('sumworkingtime')==null) { var $obj = $("#profile-menu-filter"); $obj.append; } });
|
Подключение JQuery
начиная с 11 версии происходит таким образом:
CJSCore::Init("jquery"); |
Выход:
написать еще одну функцию, всего из одной строки - подключения JQuery, и подвесить её на событие OnBeforeProlog
Код подключения события:
RegisterModuleDependences('main', "OnBeforeProlog", "mymodule", "MyClass", "initLib", 1); |
function initLib() { CJSCore::Init("jquery"); } |