+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Внедряемся в любой пункт меню в админке, часть вторая

Я сторонник минимализма инструментов и их контекстного расположения. Именно поэтому высказываю недовольства при виде левых страниц админки, где их может и не быть. Меньше страниц > меньше документации > счастливее юзер. Вот главный постулат, который я применяю на практике. В старом посте я поднимал тему, что выводите страницы там, где их ожидает увидеть юзер. Немного дополню эту тему новым постом.

Итак, представьте задача - написать отдельную админ.страницу для управления свойствами каталога. Саму страницу здесь рассматривать не будем, а только ее место в админ.части. Статья ниже предполагает ваше знакомство с событиями аминистративной части.

Где ожидает увидеть ее пользователь?

В данной задаче речь шла не совсем о свойствах инфоблока, а скорее о продолжении каталога как часть работ контент-менеджера. То есть, привязки к инфоблокам, которые он все (из разных ИБ) мог зайти и поправить на одной странице. Вариант размещения такого контента в настройках инфоблока (можно было бы добавить новую вкладку) чреват - давать права на управление не хотелось. Поэтому, размещаем ссылку на новую страницу здесь:

scr1.png

Код обработчика следующий:
public static function OnAdminListDisplay(&$list) {
   $strCurPage = $GLOBALS['APPLICATION']->GetCurPage();
   if (($strCurPage=='/bitrix/admin/iblock_list_admin.php' ||
      $strCurPage=='/bitrix/admin/iblock_element_admin.php' ||
      $strCurPage=='/bitrix/admin/iblock_section_admin.php') &&
      $_REQUEST['IBLOCK_ID']==1
   ) {
      $list->context->additional_items[] = array(
         'TEXT' => 'Свойства каталога',
         'TITLE' => 'Настройка свойств каталога',
         'GLOBAL_ICON' => 'adm-menu-setting',
         'ONCLICK' => "location.href='mn_catalog_props.php'"
      );
   }
}
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.

В итоге получили то, что и хотели - при переходе по новой ссылке подсвечивается системный пункт меню

scr2.png

Назад в раздел

Подписаться на новые материалы раздела:














CAPTCHA