Как скрыть неактивные инфоблоки в админке
На большом сайте количество инфоблоков быстро растёт, многие из них служебные и не предназначены для редактирования из админки. Вот, чтобы они не мешались, их нужно убрать из меню. Простая деактивация инфоблока не поможет, он всё равно будет выводиться, нужно кастомить меню.
Пример - готовый код, нужно просто вставить его в init.php
\Bitrix\Main\EventManager::getInstance()->addEventHandler("main", "OnBuildGlobalMenu", "hideNoactiveIblocks"); function hideNoactiveIblocks (&$aGlobalMenu, &$aModuleMenu) { $arNaIblocks = \Bitrix\Iblock\IblockTable::getList(['filter' => ['ACTIVE' => 'N'], 'select' => ['ID']])->fetchAll(); // Деактивированные инфоблоки if ($arNaIblocks) { foreach ($aModuleMenu as $m => $arMenu) { if ($arMenu["module_id"] === 'iblock' && $arMenu["items"]) { foreach ($arMenu["items"] as $i => $arItem) { if (strpos($arItem["items_id"], 'menu_iblock') !== false) { // пункты меню с инфоблоками foreach ($arNaIblocks as $arNaIblock) { if (strpos($arItem["url"], 'IBLOCK_ID='.$arNaIblock['ID'].'&') !== false) { // ID инфоблока в меню нет, проверить можно по URL unset($aModuleMenu[$m]["items"][$i]); // Убираем пункт меню с неактивным инфоблоком } } } } } } } } // нужно больше фигурных скобочек :)
Немного доработав код можно сделать разделение по сайтам, когда при многосайтовости на разных доменах будут выводиться только те инфоблоки, которые привязаны к текущему сайту (домену).
Есть вопросы или нашли ошибку? Напишите комментарий (можно без регистрации), отвечать стараюсь быстро.