Решение, не самое лучшее, но рабочее.Создаем файл admin_header.php в каталоге /bitrix/php_interface/ с содержимым:
<?
$arSites = array();
$rsSites = CSite::GetList($by="sort", $order="desc", Array());
while($arSite = $rsSites->Fetch())
{
$arSites[$arSite["LID"]] = $arSite["NAME"];
}
$fIndex = -1;
$lIndex = -1;
$lItemsMenu = array();
if(count($arSites) > 0 && CModule::IncludeModule("iblock"))
{
$iSort = 200;
$aItemsMenu = array();
foreach($arSites as $kSite=>$aSite)
{
$iSort++;
$aItemsMenu[$kSite] = array(
'text' => $aSite,
'url' => 'iblock_by_site.php?lid='.$kSite,
'more_url' => array(),
'title' => $aSite,
'parent_menu' => 'global_menu_content',
'sort' => $iSort,
'icon' => 'iblock_menu_icon_types',
'page_icon' => 'iblock_page_icon_types',
'module_id' => 'iblock',
'items_id' => 'menu_iblock_by_'.$kSite,
'dynamic' => false,
'items' => array(),
);
}
foreach($adminMenu->aGlobalMenu["global_menu_content"]["items"] as $kItem=>$aItem)
{
if($aItem["module_id"] = "iblock" && strpos($aItem["items_id"], "/") !== false)
{
if($fIndex < 0)
{
$fIndex = $kItem;
}
$IBlockId = explode("/", $aItem["items"][0]["items_id"]);
$IBlockId = intval($IBlockId[count($IBlockId)-1]);
$res = CIBlock::GetByID($IBlockId);
if($arRes = $res->GetNext())
{
$aItemsMenu[$arRes["LID"]]["items"][] = $aItem;
unset($adminMenu->aGlobalMenu["global_menu_content"]["items"][$kItem]);
}
}
if($aItem["module_id"] = "iblock" && strpos($aItem["items_id"], "/") === false)
{
if($lIndex < 0)
{
$lIndex = $kItem;
}
$lItemsMenu[] = $aItem;
unset($adminMenu->aGlobalMenu["global_menu_content"]["items"][$kItem]);
}
}
if($fIndex > -1)
{
foreach($aItemsMenu as $aItem)
{
$adminMenu->aGlobalMenu["global_menu_content"]["items"][$fIndex] = $aItem;
$fIndex++;
}
}
if($lIndex > -1)
{
foreach($lItemsMenu as $aItem)
{
$adminMenu->aGlobalMenu["global_menu_content"]["items"][$fIndex] = $aItem;
$fIndex++;
}
}
}
if(!function_exists("ContentMenuSort"))
{
function ContentMenuSort($a, $b)
{
if ($a["sort"] == $b["sort"]) {
return 0;
}
return ($a["sort"] < $b["sort"]) ? -1 : 1;
}
}
usort($adminMenu->aGlobalMenu["global_menu_content"]["items"], "ContentMenuSort");
?>
|
В итоге получаем типы инфоблоков, сгруппированных по сайтам.
Для административного интерфейса:создаем файл iblock_by_site.php в каталоге /bitrix/admin/ с содержимым:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/admin/iblock_by_site.php");?> |
и файл iblock_by_site.php в каталоге /bitrix/modules/iblock/admin/ с содержимым:
<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/iblock.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/prolog.php");
IncludeModuleLangFile(__FILE__);
$rsSite = CSite::GetByID($lid);
if($arSite = $rsSite->GetNext())
{
$sid = $lid;
$sname = $arSite["NAME"];
} else {
$rsSites = CSite::GetList($by="sort", $order="desc", Array());
if($arSite = $rsSites->Fetch())
{
LocalRedirect("/bitrix/admin/iblock_by_site.php?lid=".$arSite["LID"]);
} else {
LocalRedirect("/bitrix/admin/iblock_index.php?lang=".LANG);
}
}
$sTableID = "tbl_iblock_by_lid_".md5($sid);
$oSort = new CAdminSorting($sTableID, "SORT", "asc");
$lAdmin = new CAdminList($sTableID, $oSort);
$arHeader = array(
array("id"=>"NAME", "content"=>GetMessage("IBLOCK_ADM_NAME"), "default"=>true),
array("id"=>"IBLOCK_TYPE_ID", "content"=>GetMessage("IBLOCK_FIELD_CODE"), "default"=>true),
array("id"=>"SECTIONS", "content"=>GetMessage("IBLOCK_FIELD_SECTIONS"), "default"=>true, "align"=>"center"),
array("id"=>"SORT", "content"=>GetMessage("IBLOCK_ADM_SORT"), "default"=>true, "align"=>"right"),
);
$lAdmin->AddHeaders($arHeader);
$arListOfTypes = array();
$rsTypes = CIBlockType::GetList(array("SORT"=>"ASC"));
while($arType = $rsTypes->GetNext())
{
$rsIBlocks = CIBlock::GetList(Array($by=>$order), array("SITE_ID"=>$sid, "TYPE"=>$arType["ID"]), false);
if($arIBlocks = $rsIBlocks->GetNext())
{
if($arIBType = CIBlockType::GetByIDLang($arType["ID"], LANG))
{
$arListOfTypes[] = $arIBType;
}
}
}
$indx = 0;
foreach($arListOfTypes as $arType)
{
$indx++;
$row =& $lAdmin->AddRow($indx, $arType);
$row->AddViewField("NAME", '<a href="/bitrix/admin/iblock_admin.php?type='.$arType["IBLOCK_TYPE_ID"].'&lang='.LANG.'&admin=N">'.$arType["NAME"].'</a>');
$row->AddViewField("SECTIONS", $arType["SECTIONS"]=="Y"?GetMessage("IBLOCK_FIELD_U_YES"):GetMessage("IBLOCK_FIELD_U_NO"));
}
$lAdmin->AddFooter(
array(
array("title"=>GetMessage("MAIN_ADMIN_LIST_SELECTED"), "value"=>count($arListOfTypes)),
)
);
$APPLICATION->SetTitle(GetMessage("IBLOCK_ADM_TITLE", array("#SITE_ID#" => $sname)));
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
?>
<?
$lAdmin->DisplayList();
?>
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php");?> |
Языковой файл:создаем файл iblock_by_site.php в /bitrix/modules/iblock/lang/ru/admin/ с содержимым:
<?
$MESS ['IBLOCK_ADM_TITLE'] = "#SITE_ID#: Информационные блоки";
$MESS ['IBLOCK_ADM_NAME'] = "Название";
$MESS ['IBLOCK_FIELD_CODE'] = "Символьный код";
$MESS ['IBLOCK_FIELD_SECTIONS'] = "Содержит разделы";
$MESS ['IBLOCK_FIELD_U_YES'] = "Да";
$MESS ['IBLOCK_FIELD_U_NO'] = "Нет";
?> |