+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Группировка типов инфоблоков по сайтам (для многосайтовых систем)

Решение, не самое лучшее, но рабочее.Создаем файл 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'] = "Нет";
?> 


Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA