• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/section_property.php
  • Класс: CIBlockSectionPropertyLink
  • Вызов: CIBlockSectionPropertyLink::GetArray
static function GetArray($IBLOCK_ID, $SECTION_ID = 0, $bNewSection = false)
{
	global $DB;
	$IBLOCK_ID = intval($IBLOCK_ID);
	$SECTION_ID = intval($SECTION_ID);
	$result = array();
	$rs = $DB->Query("
		SELECT
			B.SECTION_PROPERTY,
			BP.ID PROPERTY_ID,
			BSP.SECTION_ID LINK_ID,
			BSP.SMART_FILTER,
			BSP.DISPLAY_TYPE,
			BSP.DISPLAY_EXPANDED,
			BSP.FILTER_HINT,
			BP.SORT,
			0 LEFT_MARGIN,
			B.NAME LINK_TITLE,
			BP.PROPERTY_TYPE,
			BP.USER_TYPE,
			BP.ACTIVE
		FROM
			b_iblock B
			INNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID
			LEFT JOIN b_iblock_section_property BSP ON BSP.SECTION_ID = 0 AND BSP.PROPERTY_ID = BP.ID
		WHERE
			B.ID = ".$IBLOCK_ID."
		ORDER BY
			BP.SORT ASC, BP.ID ASC
	");
	while ($ar = $rs->Fetch())
	{
		$displayTypesAvailable = self::getDisplayTypes($ar["PROPERTY_TYPE"], $ar["USER_TYPE"]);
		if (isset($displayTypesAvailable[$ar["DISPLAY_TYPE"]]))
			$DISPLAY_TYPE = $ar["DISPLAY_TYPE"];
		else
			$DISPLAY_TYPE = key($displayTypesAvailable);

		if ($ar["SECTION_PROPERTY"] === "Y")
		{
			if($ar["LINK_ID"] <> '')
			{
				$result[$ar["PROPERTY_ID"]] = array(
					"PROPERTY_ID" => $ar["PROPERTY_ID"],
					"SMART_FILTER" => $ar["SMART_FILTER"],
					"DISPLAY_TYPE" => $DISPLAY_TYPE,
					"DISPLAY_EXPANDED" => $ar["DISPLAY_EXPANDED"],
					"FILTER_HINT" => $ar["FILTER_HINT"],
					"INHERITED" => $SECTION_ID == 0 && !$bNewSection? "N" : "Y",
					"INHERITED_FROM" => 0,
					"SORT" => $ar["SORT"],
					"LEFT_MARGIN" => $ar["LEFT_MARGIN"],
					"LINK_TITLE" => $ar["LINK_TITLE"],
					"PROPERTY_TYPE" => $ar["PROPERTY_TYPE"],
					"USER_TYPE" => $ar["USER_TYPE"],
					"ACTIVE" => $ar["ACTIVE"],
				);
			}
		}
		else
		{
			$result[$ar["PROPERTY_ID"]] = array(
				"PROPERTY_ID" => $ar["PROPERTY_ID"],
				"SMART_FILTER" => "N",
				"DISPLAY_TYPE" => $DISPLAY_TYPE,
				"DISPLAY_EXPANDED" => $ar["DISPLAY_EXPANDED"],
				"FILTER_HINT" => $ar["FILTER_HINT"],
				"INHERITED" => $SECTION_ID == 0 && !$bNewSection? "N" : "Y",
				"INHERITED_FROM" => 0,
				"SORT" => $ar["SORT"],
				"LEFT_MARGIN" => $ar["LEFT_MARGIN"],
				"LINK_TITLE" => $ar["LINK_TITLE"],
				"PROPERTY_TYPE" => $ar["PROPERTY_TYPE"],
				"USER_TYPE" => $ar["USER_TYPE"],
				"ACTIVE" => $ar["ACTIVE"],
			);
		}
	}

	if ($SECTION_ID > 0)
	{
		$rs = $DB->Query($s = "
			SELECT
				B.SECTION_PROPERTY,
				BP.ID PROPERTY_ID,
				BSP.SECTION_ID LINK_ID,
				BSP.SMART_FILTER,
				BSP.DISPLAY_TYPE,
				BSP.DISPLAY_EXPANDED,
				BSP.FILTER_HINT,
				BP.SORT,
				BS.LEFT_MARGIN,
				BS.NAME LINK_TITLE,
				BP.PROPERTY_TYPE,
				BP.USER_TYPE,
				BP.ACTIVE
			FROM
				b_iblock B
				INNER JOIN b_iblock_property BP ON BP.IBLOCK_ID = B.ID
				INNER JOIN b_iblock_section M ON M.ID = ".$SECTION_ID."
				INNER JOIN b_iblock_section BS ON BS.IBLOCK_ID = M.IBLOCK_ID
					AND M.LEFT_MARGIN >= BS.LEFT_MARGIN
					AND M.RIGHT_MARGIN <= BS.RIGHT_MARGIN
				INNER JOIN b_iblock_section_property BSP ON BSP.IBLOCK_ID = BS.IBLOCK_ID AND BSP.SECTION_ID = BS.ID AND BSP.PROPERTY_ID = BP.ID
			WHERE
				B.ID = ".$IBLOCK_ID."
			ORDER BY
				BP.SORT ASC, BP.ID ASC, BS.LEFT_MARGIN ASC
		");
		while ($ar = $rs->Fetch())
		{
			$displayTypesAvailable = self::getDisplayTypes($ar["PROPERTY_TYPE"], $ar["USER_TYPE"]);
			if (isset($displayTypesAvailable[$ar["DISPLAY_TYPE"]]))
				$DISPLAY_TYPE = $ar["DISPLAY_TYPE"];
			else
				$DISPLAY_TYPE = key($displayTypesAvailable);

			$result[$ar["PROPERTY_ID"]] = array(
				"PROPERTY_ID" => $ar["PROPERTY_ID"],
				"SMART_FILTER" => $ar["SMART_FILTER"],
				"DISPLAY_TYPE" => $DISPLAY_TYPE,
				"DISPLAY_EXPANDED" => $ar["DISPLAY_EXPANDED"],
				"FILTER_HINT" => $ar["FILTER_HINT"],
				"INHERITED" => $SECTION_ID == $ar["LINK_ID"] ? "N" : "Y",
				"INHERITED_FROM" => $ar["LINK_ID"],
				"SORT" => $ar["SORT"],
				"LEFT_MARGIN" => $ar["LEFT_MARGIN"],
				"LINK_TITLE" => $ar["LINK_TITLE"],
				"PROPERTY_TYPE" => $ar["PROPERTY_TYPE"],
				"USER_TYPE" => $ar["USER_TYPE"],
				"ACTIVE" => $ar["ACTIVE"],
			);
		}
	}

	if ($result)
	{
		BitrixMainTypeCollection::sortByColumn(
			$result,
			array(
				"SORT" => SORT_ASC,
				"PROPERTY_ID" => SORT_ASC,
			),
			'',
			null,
			true
		);
	}
	return $result;
}