• Модуль: 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;
	}
}