Битрикс: модификация пунктов контекстного меню в админке
29 Апреля 2015

Битрикс: модификация пунктов контекстного меню в админке

Опишу пару примеров для скрытия некоторых пунктов контекстного меню и меню с доступными действиями в админке Битрикс. Мне это требовалось, чтобы ограничить выбор доступных действий для некоторых групп пользователей.

Для этого будет нужно написать обработчик события OnAdminListDisplay. Событие возникает при выводе информации в админке в разделах со списком элементов, позволяет получить ссылку на объект класса, и произвести в нем все необходимые действия: будь то изменение, удаление или добавление команд в меню.

Пишем обработчик и функцию. Собственно, пример кода:

arActions["clear_counter"]);//удаляем кнопку сбросить счетчик посмотров
    unset($list->arActions["section"]); //удалям перенести в раздел
    unset($list->arActions["add_section"]); //удалям добавить привязку к разделу

    //удаляем пункты в контекстном меню в списке элементов
    $count = $list->aFooter[0]["value"]; //подсчитываем сколько всего элементов
    $i = 0;
    while ($i <= $count) {
        unset($list->aRows[$i]->aActions[2]); //сбросить счетчик просмотров 
        unset($list->aRows[$i]->aActions[3]); //копировать
        $i++;
    }

}

Вы можете распечатать объект $list, чтобы увидеть все содержимое.

echo "<pre>"; print_r($list); echo "</pre>";

Еще выложу пример того как можно модифицировать меню на панели управления с левой стороны. Я удалил меню со ссылками для экспорта/импорта информации из инфоблоков, опять же, чтобы к ним не было доступа у определенных групп пользователей.

Здесь поможет другое событие OnBuildGlobalMenu (хорошая статья с другим примером модификации меню). Пример кода:

//скрытие иконок для импорта, экспорта информации из инфоблока
AddEventHandler('main', 'OnBuildGlobalMenu', 'IblockImportExportDelete');

function IblockImportExportDelete(&$aGlobalMenu, &$aModuleMenu) {
    if ($GLOBALS["USER"]->GetID() != 1) {
        $i = 0;
        while (in_array($aModuleMenu[$i], $aModuleMenu)) {
            $key = array_search("menu_iblock", $aModuleMenu[$i]);
            //пункты меню с импортом экспортом инфоблока содержатся в массиве с $aModuleMenu[номер] с ключем items_id и значением menu_iblock
            //ищем его и уданяем
            if ($key == "items_id") {
                unset($aModuleMenu[$i]);
            }
            $i++;
        }
    }
}

Комментарии

Использую в своей работе