- Модуль: iblock
- Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblock.php
- Класс: CAllIBlock
- Вызов: CAllIBlock::GetArrayByID
static function GetArrayByID($ID, $FIELD = "")
{
/** @global CDatabase $DB */
global $DB;
$ID = (int)$ID;
if ($ID <= 0)
return false;
if(CACHED_b_iblock === false)
{
$res = $DB->Query("
SELECT b_iblock.*,".$DB->DateToCharFunction("TIMESTAMP_X")." TIMESTAMP_X
from b_iblock
WHERE ID = ".$ID
);
$arResult = $res->Fetch();
if($arResult)
{
$arMessages = CIBlock::GetMessages($ID);
$arResult = array_merge($arResult, $arMessages);
$arResult["FIELDS"] = CIBlock::GetFields($ID);
}
}
else
{
global $CACHE_MANAGER;
$bucket_size = intval(CACHED_b_iblock_bucket_size);
if($bucket_size<=0) $bucket_size = 20;
$bucket = intval($ID/$bucket_size);
$cache_id = $bucket_size."iblock".$bucket;
if($CACHE_MANAGER->Read(CACHED_b_iblock, $cache_id, "b_iblock"))
{
$arIBlocks = $CACHE_MANAGER->Get($cache_id);
}
else
{
$arIBlocks = array();
$res = $DB->Query("
SELECT b_iblock.*,".$DB->DateToCharFunction("TIMESTAMP_X")." TIMESTAMP_X
from b_iblock
WHERE ID between ".($bucket*$bucket_size)." AND ".(($bucket+1)*$bucket_size-1)
);
while($arIBlock = $res->Fetch())
{
$arMessages = CIBlock::GetMessages($arIBlock["ID"]);
$arIBlock = array_merge($arIBlock, $arMessages);
$arIBlock["FIELDS"] = CIBlock::GetFields($arIBlock["ID"]);
$arIBlocks[$arIBlock["ID"]] = $arIBlock;
}
$CACHE_MANAGER->Set($cache_id, $arIBlocks);
}
if(isset($arIBlocks[$ID]))
{
$arResult = $arIBlocks[$ID];
if(!array_key_exists("ELEMENT_DELETE", $arResult))
{
$arMessages = CIBlock::GetMessages($ID);
$arResult = array_merge($arResult, $arMessages);
CIBlock::CleanCache($ID);
}
if (
!array_key_exists("FIELDS", $arResult)
|| !is_array($arResult["FIELDS"]["IBLOCK_SECTION"]["DEFAULT_VALUE"])
)
{
$arResult["FIELDS"] = CIBlock::GetFields($ID);
CIBlock::CleanCache($ID);
}
}
else
{
$arResult = false;
}
}
if (empty($arResult))
return false;
if ($FIELD)
{
if (array_key_exists($FIELD, $arResult))
return $arResult[$FIELD];
else
return null;
}
else
{
return $arResult;
}
}