Как скрыть неактивные инфоблоки в админке

81
Алексей,
Как скрыть неактивные инфоблоки в админке
Как скрыть неактивные инфоблоки в админке

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

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

Пример - готовый код, нужно просто вставить его в 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]); // Убираем пункт меню с неактивным инфоблоком
							}
						}
					}
				}
			} 
		}
	}
} // нужно больше фигурных скобочек :)

Немного доработав код можно сделать разделение по сайтам, когда при многосайтовости на разных доменах будут выводиться только те инфоблоки, которые привязаны к текущему сайту (домену).

Опубликовано 26 октября 2021 | Обновлено 27 октября 2021
готовый код, инфоблоки, админка, разработчику, костыли
Поделиться
Комментарии
Авторизуйтесь чтобы получать уведомления об ответе
Alex
25 ноя 2021
Зачем плодить скобки если можно if(!$arNaIblocks) return? -___- Добавь ещё оформление кода в комменты раз уж сайт про код
Алексей
25 ноя 2021
Alex, не всегда в обработчиках событий можно делать return, т.к. может ожидаться возврат данных (пусть и не изменённых). Оформление кода в комментариях когда-нибудь обязательно добавлю)
На большом сайте количество инфоблоков быстро растёт, многие из них служебные и не предназначены для редактирования из админки. Вот что бы они не мешались их нужно убрать из меню. Простая деактивация инфоблока не поможет, он всё равно будет выводиться, нужно кастомить меню.