• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblockproperty.php
  • Класс: CAllIBlockProperty
  • Вызов: CAllIBlockProperty::GetPropertyEnum
static function GetPropertyEnum($PROP_ID, $arOrder = array("SORT"=>"asc"), $arFilter = array())
{
	global $DB;

	$strSqlSearch = "";
	if(is_array($arFilter))
	{
		foreach($arFilter as $key => $val)
		{
			$key = mb_strtoupper($key);
			switch($key)
			{
			case "ID":
				$strSqlSearch .= "AND (BPE.ID=".intval($val).")n";
				break;
			case "IBLOCK_ID":
				$strSqlSearch .= "AND (BP.IBLOCK_ID=".intval($val).")n";
				break;
			case "VALUE":
				$strSqlSearch .= "AND (BPE.VALUE LIKE '".$DB->ForSql($val)."')n";
				break;
			case "EXTERNAL_ID":
			case "XML_ID":
				$strSqlSearch .= "AND (BPE.XML_ID LIKE '".$DB->ForSql($val)."')n";
				break;
			}
		}
	}

	$arSqlOrder = array();
	if(is_array($arOrder))
	{
		foreach($arOrder as $by => $order)
		{
			$by = mb_strtolower($by);
			$order = mb_strtolower($order);
			if ($order!="asc")
				$order = "desc";

			if ($by == "value")
				$arSqlOrder["BPE.VALUE"] = "BPE.VALUE ".$order;
			elseif ($by == "id")
				$arSqlOrder["BPE.ID"] = "BPE.ID ".$order;
			elseif ($by == "external_id")
				$arSqlOrder["BPE.XML_ID"] = "BPE.XML_ID ".$order;
			elseif ($by == "xml_id")
				$arSqlOrder["BPE.XML_ID"] = "BPE.XML_ID ".$order;
			else
				$arSqlOrder["BPE.SORT"] = "BPE.SORT ".$order;
		}
	}

	if(empty($arSqlOrder))
		$strSqlOrder = "";
	else
		$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);

	return $DB->Query("
		SELECT BPE.*, BPE.XML_ID as EXTERNAL_ID
		FROM
			b_iblock_property_enum BPE
			INNER JOIN b_iblock_property BP ON BP.ID = BPE.PROPERTY_ID
		WHERE
		".(
			is_numeric(mb_substr($PROP_ID, 0, 1))?
			"BP.ID = ".(int)$PROP_ID:
			"BP.CODE = '".$DB->ForSql($PROP_ID)."'"
		)."
		".$strSqlSearch."
		".$strSqlOrder."
	");
}