• Модуль: iblock
  • Путь к файлу: ~/bitrix/modules/iblock/classes/general/iblocktype.php
  • Класс: CIBlockType
  • Вызов: CIBlockType::GetList
static function GetList($arOrder = array("SORT" => "ASC"), $arFilter = array())
{
	/** @global CDatabase $DB */
	global $DB;
	/** @global CCacheManager $CACHE_MANAGER */
	global $CACHE_MANAGER;
	$bLang = false;
	$bNameSort = false;
	$strSqlSearch = "1=1n";

	foreach ($arFilter as $key => $val)
	{
		if (!is_array($val) && $val == '')
			continue;

		switch(mb_strtoupper($key))
		{
			case "ID":
				$strSqlSearch .= "AND UPPER(T.ID) LIKE UPPER('".$DB->ForSql($val)."')n";
				break;

			case "=ID":
				if(is_array($val))
				{
					if(!empty($val))
					{
						$sqlVal = array_map(array($DB, 'ForSQL'), $val);
						$strSqlSearch .= "AND T.ID in ('".implode("', '", $sqlVal)."')n";
					}
				}
				else
				{
					$strSqlSearch .= "AND T.ID = '".$DB->ForSql($val)."'n";
				}
				break;

			case "NAME":
				$strSqlSearch .= "AND UPPER(TL.NAME) LIKE UPPER('%".$DB->ForSql($val)."%')n";
				$bLang = true;
				break;
			case "LANGUAGE_ID":
				$strSqlSearch .= "AND TL.LID = '".$DB->ForSql($val)."'n";
				$bLang = true;
				break;
		}
	}

	$strSqlOrder = '';
	foreach ($arOrder as $by => $order)
	{
		$by = mb_strtoupper($by);
		if ($by == "ID")
			$by = "T.ID";
		elseif ($by == "NAME")
		{
			$by = "TL.NAME";
			$bLang = true;
			$bNameSort = true;
		}
		else
			$by = "T.SORT";

		$order = mb_strtolower($order);
		if ($order != "desc")
			$order = "asc";

		if ($strSqlOrder == '')
			$strSqlOrder = " ORDER BY ";
		else
			$strSqlOrder .= ', ';

		$strSqlOrder .= $by." ".$order;
	}

	$strSql = "
		SELECT ".($bLang ? "DISTINCT" : "")." T.*".($bNameSort ? ",TL.NAME" : "")."
		FROM b_iblock_type T
		".($bLang ? " LEFT JOIN b_iblock_type_lang TL ON TL.IBLOCK_TYPE_ID = T.ID " : "")."
		WHERE ".$strSqlSearch.$strSqlOrder;

	if (CACHED_b_iblock_type === false)
	{
		$res = $DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__); } else { if ($CACHE_MANAGER->Read(CACHED_b_iblock_type, $cache_id = "b_iblock_type".md5($strSql), "b_iblock_type")) { $arResult = $CACHE_MANAGER->Get($cache_id); } else { $arResult = array(); $res = $DB->Query($strSql, false, "FILE: ".__FILE__."
LINE: ".__LINE__); while ($ar = $res->Fetch()) $arResult[] = $ar; $CACHE_MANAGER->Set($cache_id, $arResult); } $res = new CDBResult; $res->InitFromArray($arResult); } return $res; }