Как добавить свой пункт меню в Рабочей группе на портале

Как добавить свой пункт меню в Рабочей группе на портале

Дано: 
меню рабочей группы 

Дано:

меню рабочей группы

Безымянный.jpg

Требуется: добавить туда какой-либо свой пункт.

Для упрощения задачи - будем добавлять наш пункт последним.

В нашем примере - это пункт "Трудозатраты", по нажатию на который мы должны перейти по адресу /timetrack/group/ID группы/

Решение:

Задача не такая тривиальная.как представляется на первый взгляд. Меню группы строится компонентом bitrix:socialnetwork.group в зависимости от настроек данной группы, сам компонент подключается внутри комплексного компонента bitrix:socialnetwork_group . Таким образом - чтобы поменять меню группы, надо кастомизировать два компонента - а это влечет за собой разрыв со всеми дальнейшими обновлениями "родных" компонентов Битрикс.

Поэтому решать будем иначе - перехватывая событие формирования страницы.

Код подвесим на событие OnAfterEpilog модуля main.

				RegisterModuleDependences('main', "OnAfterEpilog", "mymodule", "MyClass", "addMenuLink", 1);
			

Событие OnAfterEpilog не имеет параметров, но генерируется в тот момент, когда код страницы (включая все отложенные функции) уже сгенерирован.

Чтобы понять, что следует писать в нашу функцию, посмотрим этот код внимательно:

Безымянный.jpg

Очевидно, что нам нужно найти тег 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, необходимо его подключить

Подключение JQuery

начиная с 11 версии происходит таким образом:

				CJSCore::Init("jquery");
			
Но, если подключить JQuery непосредственно перед выполняемым кодом в нашей функции, мы получим ошибку, т к (как было замечено выше) к моменту окончания формирования эпилога все отложенные функции уже отработали!

Выход:

написать еще одну функцию, всего из одной строки - подключения JQuery, и подвесить её на событие OnBeforeProlog

Код подключения события:

				RegisterModuleDependences('main', "OnBeforeProlog", "mymodule", "MyClass", "initLib", 1);
			
Код функции:
				 function initLib()    {       CJSCore::Init("jquery");    }
			
Результат:

Безымянный2.jpg

Похожие записи в блоге

Все статьи