Внедряемся в любой пункт меню в админке, часть вторая
Внедряемся в любой пункт меню в админке, часть вторая
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Внедряемся в любой пункт меню в админке, часть вторая
Я сторонник минимализма инструментов и их контекстного расположения. Именно поэтому высказываю недовольства при виде левых страниц админки, где их может и не быть. Меньше страниц > меньше документации > счастливее юзер. Вот главный постулат, который я применяю на практике. В старом посте я поднимал тему, что выводите страницы там, где их ожидает увидеть юзер. Немного дополню эту тему новым постом. Итак, представьте задача - написать отдельную админ.страницу для управления свойствами каталога. Саму страницу здесь рассматривать не будем, а только ее место в админ.части. Статья ниже предполагает ваше знакомство с событиями аминистративной части.
Где ожидает увидеть ее пользователь?
В данной задаче речь шла не совсем о свойствах инфоблока, а скорее о продолжении каталога как часть работ контент-менеджера. То есть, привязки к инфоблокам, которые он все (из разных ИБ) мог зайти и поправить на одной странице. Вариант размещения такого контента в настройках инфоблока (можно было бы добавить новую вкладку) чреват - давать права на управление не хотелось. Поэтому, размещаем ссылку на новую страницу здесь:
mn_catalog_props.php это админ.страница с нужным нам кодом, лежащая в корне /bitrix/admin. Все как и надо. Но вот незадача - при переходе по такой ссылке выделение в меню слетает и пользователя выкидывает из каталога. Надо переопределить главное меню каталога, дополнив его новой ссылкой. За это отвечает событие OnBuildGlobalMenu. Принцип работы с переменными в этом обработчике каждый раз разный, единого рецепта не существует. Для начала просто рекомендую вывести дерево меню на экран и посмотреть к чему можно прицепиться.
Я нашел следующее простое условие:
public static function OnBuildGlobalMenu(&$aGlobalMenu, &$aModuleMenu) {
foreach ($aModuleMenu as &$arItem) {
if ($arItem['items_id'] == 'menu_iblock_/catalog') {
$arItem['items'][0]['more_url'][] = 'mn_catalog_props.php';
}
}
}
catalog - это тип целевого инфоблока. То есть, мы просто дополнили пункт меню для типа ИБ catalog новым URL.
В итоге получили то, что и хотели - при переходе по новой ссылке подсвечивается системный пункт меню