• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockelement.php
  • Класс: CAllIBlockElement
  • Вызов: CAllIBlockElement::GetElementGroups
static function GetElementGroups($ID, $bElementOnly = false, $arSelect = array())
{
	global $DB;

	$arFields = array(
		"ID" => "BS.ID",
		"TIMESTAMP_X" => "BS.TIMESTAMP_X",
		"MODIFIED_BY" => "BS.MODIFIED_BY",
		"DATE_CREATE" => "BS.DATE_CREATE",
		"CREATED_BY" => "BS.CREATED_BY",
		"IBLOCK_ID" => "BS.IBLOCK_ID",
		"IBLOCK_SECTION_ID" => "BS.IBLOCK_SECTION_ID",
		"ACTIVE" => "BS.ACTIVE",
		"GLOBAL_ACTIVE" => "BS.GLOBAL_ACTIVE",
		"SORT" => "BS.SORT",
		"NAME" => "BS.NAME",
		"PICTURE" => "BS.PICTURE",
		"LEFT_MARGIN" => "BS.LEFT_MARGIN",
		"RIGHT_MARGIN" => "BS.RIGHT_MARGIN",
		"DEPTH_LEVEL" => "BS.DEPTH_LEVEL",
		"DESCRIPTION" => "BS.DESCRIPTION",
		"DESCRIPTION_TYPE" => "BS.DESCRIPTION_TYPE",
		"SEARCHABLE_CONTENT" => "BS.SEARCHABLE_CONTENT",
		"CODE" => "BS.CODE",
		"XML_ID" => "BS.XML_ID",
		"EXTERNAL_ID" => "BS.XML_ID",
		"TMP_ID" => "BS.TMP_ID",
		"DETAIL_PICTURE" => "BS.DETAIL_PICTURE",
		"SOCNET_GROUP_ID" => "BS.SOCNET_GROUP_ID",

		"LIST_PAGE_URL" => "B.LIST_PAGE_URL",
		"SECTION_PAGE_URL" => "B.SECTION_PAGE_URL",
		"IBLOCK_TYPE_ID" => "B.IBLOCK_TYPE_ID",
		"IBLOCK_CODE" => "B.CODE",
		"IBLOCK_EXTERNAL_ID" => "B.XML_ID",

		"IBLOCK_ELEMENT_ID" => "SE.IBLOCK_ELEMENT_ID",
		"ADDITIONAL_PROPERTY_ID" => "SE.ADDITIONAL_PROPERTY_ID",
	);

	if(is_array($ID))
	{
		if (!empty($ID))
		{
			MainTypeCollection::normalizeArrayValuesByInt($ID);
		}
		$sqlID = !empty($ID) ? $ID : array(0);
	}
	else
	{
		$sqlID = array((int)$ID);
	}

	$arSqlSelect = array();
	foreach($arSelect as &$field)
	{
		$field = mb_strtoupper($field);
		if(array_key_exists($field, $arFields))
			$arSqlSelect[$field] = $arFields[$field]." AS ".$field;
	}
	if (isset($field))
		unset($field);

	if (array_key_exists("DESCRIPTION", $arSqlSelect))
		$arSqlSelect["DESCRIPTION_TYPE"] = $arFields["DESCRIPTION_TYPE"]." AS DESCRIPTION_TYPE";

	if(array_key_exists("LIST_PAGE_URL", $arSqlSelect) || array_key_exists("SECTION_PAGE_URL", $arSqlSelect))
	{
		$arSqlSelect["ID"] = $arFields["ID"]." AS ID";
		$arSqlSelect["CODE"] = $arFields["CODE"]." AS CODE";
		$arSqlSelect["EXTERNAL_ID"] = $arFields["EXTERNAL_ID"]." AS EXTERNAL_ID";
		$arSqlSelect["IBLOCK_TYPE_ID"] = $arFields["IBLOCK_TYPE_ID"]." AS IBLOCK_TYPE_ID";
		$arSqlSelect["IBLOCK_ID"] = $arFields["IBLOCK_ID"]." AS IBLOCK_ID";
		$arSqlSelect["IBLOCK_CODE"] = $arFields["IBLOCK_CODE"]." AS IBLOCK_CODE";
		$arSqlSelect["IBLOCK_EXTERNAL_ID"] = $arFields["IBLOCK_EXTERNAL_ID"]." AS IBLOCK_EXTERNAL_ID";
		$arSqlSelect["GLOBAL_ACTIVE"] = $arFields["GLOBAL_ACTIVE"]." AS GLOBAL_ACTIVE";
	}

	if (!empty($arSelect))
	{
		$strSelect = implode(", ", $arSqlSelect);
	}
	else
	{
		$strSelect = "
			BS.*
			,B.LIST_PAGE_URL
			,B.SECTION_PAGE_URL
			,B.IBLOCK_TYPE_ID
			,B.CODE as IBLOCK_CODE
			,B.XML_ID as IBLOCK_EXTERNAL_ID
			,BS.XML_ID as EXTERNAL_ID
			,SE.IBLOCK_ELEMENT_ID
		";
	}

	$dbr = new CIBlockResult($DB->Query("
		SELECT
			".$strSelect."
		FROM
			b_iblock_section_element SE
			INNER JOIN b_iblock_section BS ON SE.IBLOCK_SECTION_ID = BS.ID
			INNER JOIN b_iblock B ON B.ID = BS.IBLOCK_ID
		WHERE
			SE.IBLOCK_ELEMENT_ID in (".implode(", ", $sqlID).")
			".($bElementOnly?"AND SE.ADDITIONAL_PROPERTY_ID IS NULL ":"")."
	"));
	return $dbr;
}