[spoiler]
Обработчики можно расположить в файле /bitrix/php_interface/init.php
// Событие происходит при формировании списка дополнительного // функционала соц.сети // В обработчике можно изменить или дополнить список AddEventHandler("socialnetwork", "OnFillSocNetFeaturesList", "__AddSocNetFeature"); // Событие происходит при формировании списка закладок // В обработчике можно изменить список закладок AddEventHandler("socialnetwork", "OnFillSocNetMenu", "__AddSocNetMenu"); // Событие происходит в комплексном компоненте при работе в ЧПУ // режиме при формировании списка шаблонов адресов страниц // комплексного компонента AddEventHandler("socialnetwork", "OnParseSocNetComponentPath", "__OnParseSocNetComponentPath"); // Событие происходит в комплексном компоненте при работе в // не ЧПУ режиме при формировании списка псевдонимов переменных AddEventHandler("socialnetwork", "OnInitSocNetComponentVariables", "__OnInitSocNetComponentVariables"); // При формировании списка дополнительного функционала // добавим дополнительную запись superficha function __AddSocNetFeature(&$arSocNetFeaturesSettings) { $arSocNetFeaturesSettings["superficha"] = array( "allowed" => array(SONET_ENTITY_USER, SONET_ENTITY_GROUP), "operations" => array( "write" => array(SONET_ENTITY_USER => SONET_RELATIONS_TYPE_NONE, SONET_ENTITY_GROUP => SONET_ROLES_MODERATOR), "view" => array(SONET_ENTITY_USER => SONET_RELATIONS_TYPE_ALL, SONET_ENTITY_GROUP => SONET_ROLES_USER), ), "minoperation" => "view", ); } // При формировании списка закладок добавим дополнительную // закладку для функционала superficha function __AddSocNetMenu(&$arResult) { // Достуна для показа $arResult["CanView"]["superficha"] = true; // Ссылка закладки $arResult["Urls"]["superficha"] = CComponentEngine::MakePathFromTemplate("/workgroups/group/#group_id#/superficha/", array("group_id" => $arResult["Group"]["ID"])); // Название закладки $arResult["Title"]["superficha"] = "Моя фича"; } // При формировании списка шаблонов адресов страниц // комплексного компонента в режиме ЧПУ добавим шаблон // для superficha function __OnParseSocNetComponentPath(&$arUrlTemplates, &$arCustomPagesPath) { // Шаблон адреса страницы $arUrlTemplates["superficha"] = "group/#group_id#/superficha/"; // Путь относительно корня сайта, // по которому лежит страница $arCustomPagesPath["superficha"] = "/bitrix/php_interface/1/"; } // Если компонент соц.сети работает в режиме // ЧПУ, то этот обработчик не нужен function __OnInitSocNetComponentVariables(&$arVariableAliases, &$arCustomPagesPath) { } |
По пути /bitrix/php_interface/1/ должен лежать файл superficha.php, который содержит код страницы
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <? $APPLICATION->IncludeComponent( "bitrix:socialnetwork.group_menu", "", Array( "GROUP_VAR" => $arResult["ALIASES"]["group_id"], "PAGE_VAR" => $arResult["ALIASES"]["page"], "PATH_TO_GROUP" => $arResult["PATH_TO_GROUP"], "PATH_TO_GROUP_MODS" => $arResult["PATH_TO_GROUP_MODS"], "PATH_TO_GROUP_USERS" => $arResult["PATH_TO_GROUP_USERS"], "PATH_TO_GROUP_EDIT" => $arResult["PATH_TO_GROUP_EDIT"], "PATH_TO_GROUP_REQUEST_SEARCH" => $arResult["PATH_TO_GROUP_REQUEST_SEARCH"], "PATH_TO_GROUP_REQUESTS" => $arResult["PATH_TO_GROUP_REQUESTS"], "PATH_TO_GROUP_REQUESTS_OUT" => $arResult["PATH_TO_GROUP_REQUESTS_OUT"], "PATH_TO_GROUP_BAN" => $arResult["PATH_TO_GROUP_BAN"], "PATH_TO_GROUP_BLOG" => $arResult["PATH_TO_GROUP_BLOG"], "PATH_TO_GROUP_PHOTO" => $arResult["PATH_TO_GROUP_PHOTO"], "PATH_TO_GROUP_FORUM" => $arResult["PATH_TO_GROUP_FORUM"], "PATH_TO_GROUP_CALENDAR" => $arResult["PATH_TO_GROUP_CALENDAR"], "PATH_TO_GROUP_FILES" => $arResult["PATH_TO_GROUP_FILES"], "PATH_TO_GROUP_TASKS" => $arResult["PATH_TO_GROUP_TASKS"], "GROUP_ID" => $arResult["VARIABLES"]["group_id"], "PAGE_ID" => "group_superficha", ), $component ); ?> <br /> Полезный код страницы... |
MainVoid, поступил также.
Попробую с новым механизмом...
Закладка создается как на странице группы так и на странице пользователя.
Как не подключать или отключить закладку для пользователя?
Заранее спасибо за ответ.
В обработчик события добавления пункта меню передается массив $arResult, содержащий вычисляемые значения компонента меню. На основании данных этого масива можно точно понять, где именно вызван обработчик. Вы можете вывести массив на экран
и ориентироваться на любой характерный ключ. Например, на ключи "User" и "Group".
файл init.php
файл /local/php_interface/tst/testItem.php
В итоге в меню пользователя ничего не отображается, хотя делал по аналогии с примером, только функции переименовал, ну и запись в лог добавил
Как я и сделал, потому что
Ещё вопрос про языковые файлы - для того, чтобы подписи были на странице настроек группы, надо в lang-файлы прописывать сообщения или их можно как-то в функции __AddSocNetFeature указать?
Про закладки я ответил выше.
Если вам реально не нужны разные локализации, то смысла выделять языковые фразы вообще нет. Если вам нужны локализации, то вы можете выделить фразы в любой файл, который затем следует подключить при вызове отработчика события. Подключение, например, можно сделать в том файле, в котором размещен обработчик события.
Сейчас есть 9.04 в бете. Там переработано меню группы - толково сделано, но не подключается доп. функционал по этому примеру. Причём не в меню не выводится, а именно не подключается. Даже если нужный адрес вводишь, не работает.
Со старыми шаблонами (от 9.01) всё ОК, но гаджеты...
Обновил до 9.0.4 Беты. Вроде работает на страницах юзера, но шаблон меню кастомный. На странице групп каша. Слава богу функционала групп отключен.
Копаюсь в компоненте соцсети. Для чего то это $arCustomPagesPath = array(); включили же......
Задумка то у меню хорошая...
Интересная особенность - если обработчик регистрируешь в init.php, названия пунктов меню не передаются, а если непосредственно перед вызовом компонента соц.сети, то передаются.
Спасибо товарищу Сталину за наше счастливое детство!
Алексей, скажите, пожалуйста, является ли здесь описанный метод уже устаревшим, или он используется наравне с новым? Если наравне, то в чем их принципиальное отличие и зачем вводили новый функционал?
Из истории обновлений:
2010-06-30
В комплексных компонентах введен параметр "Отображать меню соцсети в шаблоне сайта", позволяющий при включенном в компоненте bitrix:menu параметре "Откладывать выполнение шаблона меню" добавлять пункты меню соцсети в меню сайта выбранного типа.
Это разные функционалы, новый (из 9.0. не отменяет действие прежнего.
Новый функционал позволяет перекинуть пункты меню соцсети прямо в меню сайта (при этом эти пункты не кешируются).
Конечно, в этом случае новый интерфейс настройки доступа к функционалу и drag&drop не будут использоваться.
Вводили "на будушее". Вообще говоря, была задача в типовом решении сайта сообщества отображать пункты меню соцсети в правом меню в шаблоне сайта, но, увы, не успели с выпуском технологии к выпуску типового решения, в следующей сборке дистрибутива планируем использовать ее в полной мере.
Может в данный обработчик таки передавать кто его вызывает?
господа, давайте писать корректный код:
Простите за вторжение и спам.
Как создать закладку с названием опрос в соц групе?
/bitrix/php_interface/1/
папку 1 нужно создавать?
// ЧПУ, то этот обработчик не нужен
что и как здесь нужно описывать. версия битрикс 11
Костылем, конечно, я и сам могу.
["superficha"] - superficha.php
Но столкнулась с проблемой: при вызове события "OnFillSocNetMenu" в компоненте socialnetwork.user_menu передается только один параметр "$arResult", а очеееень хотелось бы видеть еще и $arParams.
Я, конечно, скопирую компоненту к себе в пространство и поправлю это, но было очень здорово, чтобы это было в системной, учитывая, что кроме одной единственной строчки ничего править не требуется.
В меню профиля пользователя так и нельзя легально добавить пункт меню без копирования компонентов в свой namespace?
Никакой другой механики не появилось?