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

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

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

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

Пример - готовый код, нужно просто вставить его в 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 | Обновлено 23 марта 2022
готовый код, инфоблоки, админка, разработчику, костыли
Поделиться
Комментарии
❮…❯
Авторизуйтесь чтобы получать уведомления об ответе
8 мар 2024
Как добавить проверку и скрывать тип инфоблока, если сами инфоблоки в нём отсутствуют или скрыты?
Алексей
8 мар 2024
Дмитрий, такой возможности нету. Можно попробовать написать скрипт, который на событии OnBuildGlobalMenu будет проверять наличие активных инфоблоков в типе, и при их отсутствии, будет его скрывать. Но я не пробовал.
Alex
25 ноя 2021
Зачем плодить скобки если можно if(!$arNaIblocks) return? -___- Добавь ещё оформление кода в комменты раз уж сайт про код
Алексей
25 ноя 2021
Alex, не всегда в обработчиках событий можно делать return, т.к. может ожидаться возврат данных (пусть и не изменённых). Оформление кода в комментариях когда-нибудь обязательно добавлю)
На большом сайте количество инфоблоков быстро растёт, многие из них служебные и не предназначены для редактирования из админки. Вот, чтобы они не мешались, их нужно убрать из меню. Простая деактивация инфоблока не поможет, он всё равно будет выводиться, нужно кастомить меню.