Вот и случилось так, что два абсолютно разных сайта на одном ядре начали жить полноценной жизнью каждый в "своей админке". И вроде все бы ничего, но растущее количество инфоблоков начинает вносить путаницу, ведь и по site1.ru и по site2.ru открываются одни и те же инфоблоки, а хотелось бы, чтобы показывались только нужные (этого сайта) инфоблоки.[spoiler]
Если вы админите два (или более) таких сайта по разным URL, то вот обработчик, который решает данную проблему:
В самом начале определен массив сайтов, ключи которого есть HTTP_HOST сайтов, а значения - ID сайтов в админке Битрикса. Замечу, что надо прописать и и site1.ru, если заходы бывают как с первого, так и со второго.
Далее из базы напрямую (подходящего API нет) дергаем все пары SITE <> IB и запоминаем их.
Ну а потом бежим по массиву меню и удаляем те пункты меню инфоблоков, которые относятся к другому сайту, нежели тот, под которым мы смотрим админку. Если удаляем все инфоблоки из типа, то в конце грохаем из меню и сам тип, чтобы не болталась пустая папка.
Если вы админите два (или более) таких сайта по разным URL, то вот обработчик, который решает данную проблему:
<?
AddEventHandler('main', 'OnBuildGlobalMenu', 'ASDOnBuildGlobalMenu');
function ASDOnBuildGlobalMenu(&$aGlobalMenu, &$aModuleMenu)
{
$arSites = array(
'www.site1.ru' => 's1',
'www.site2.ru' => 's2',
);
$arIBsites = array();
$rsIB = $GLOBALS['DB']->Query("SELECT * FROM b_iblock_site;");
while ($arIB = $rsIB->Fetch())
$arIBsites[$arIB['IBLOCK_ID']] = $arIB['SITE_ID'];
foreach ($aModuleMenu as $k => &$v)
{
if($v['parent_menu']=='global_menu_content' && $v['module_id']=='iblock' && $v['page_icon']!='iblock_page_icon_settings')
{
$cUnsets = 0;
$cAll = count($v['items']);
foreach ($v['items'] as $kk => $vv)
{
$BID = array_pop(explode('/', $vv['items_id']));
if ($arIBsites[$BID] != $arSites[$_SERVER['SERVER_NAME']])
{
unset($v['items'][$kk]);
$cUnsets++;
}
}
if ($cUnsets == $cAll)
unset($aModuleMenu[$k]);
}
}
}
?> |
В самом начале определен массив сайтов, ключи которого есть HTTP_HOST сайтов, а значения - ID сайтов в админке Битрикса. Замечу, что надо прописать и и site1.ru, если заходы бывают как с первого, так и со второго.
Далее из базы напрямую (подходящего API нет) дергаем все пары SITE <> IB и запоминаем их.
Ну а потом бежим по массиву меню и удаляем те пункты меню инфоблоков, которые относятся к другому сайту, нежели тот, под которым мы смотрим админку. Если удаляем все инфоблоки из типа, то в конце грохаем из меню и сам тип, чтобы не болталась пустая папка.