• Модуль: search
  • Путь к файлу: ~/bitrix/modules/search/classes/general/search.php
  • Класс: CAllSearch
  • Вызов: CAllSearch::__PrepareSort
function __PrepareSort($aSort = array(), $strSearchContentAlias = "sc.", $bTagsCloud = false)
{
	$arOrder = array();
	if (!is_array($aSort))
		$aSort = array($aSort => "ASC");

	if ($bTagsCloud)
	{
		foreach ($aSort as $key => $ord)
		{
			$ord = mb_strtoupper($ord) <> "ASC"? "DESC": "ASC";
			$key = mb_strtoupper($key);
			switch ($key)
			{
			case "DATE_CHANGE":
				$arOrder[] = "DC_TMP ".$ord;
				break;
			case "NAME":
			case "CNT":
				$arOrder[] = $key." ".$ord;
				break;
			}
		}
		if (count($arOrder) == 0)
		{
			$arOrder[] = "NAME ASC";
		}
	}
	else
	{
		$this->flagsUseRatingSort = 0;
		foreach ($aSort as $key => $ord)
		{
			$ord = mb_strtoupper($ord) <> "ASC"? "DESC": "ASC";
			$key = mb_strtoupper($key);
			switch ($key)
			{
			case "DATE_CHANGE":
				if (!($this->flagsUseRatingSort & 0x01))
					$this->flagsUseRatingSort = 0x02;
				$arOrder[] = $strSearchContentAlias.$key." ".$ord;
				break;
			case "RANK":
				if (!($this->flagsUseRatingSort & 0x02))
					$this->flagsUseRatingSort = 0x01;
				$arOrder[] = '`'.$key."` ".$ord;
				break;
			case "TITLE_RANK":
			case "CUSTOM_RANK":
				$arOrder[] = $key." ".$ord;
				break;
			case "ID":
			case "MODULE_ID":
			case "ITEM_ID":
			case "TITLE":
			case "PARAM1":
			case "PARAM2":
			case "UPD":
			case "DATE_FROM":
			case "DATE_TO":
			case "URL":
				if (!($this->flagsUseRatingSort & 0x01))
					$this->flagsUseRatingSort = 0x02;
				$arOrder[] = $key." ".$ord;
				break;
			}
		}

		if (count($arOrder) == 0)
		{
			$arOrder[] = "CUSTOM_RANK DESC";
			$arOrder[] = "`RANK` DESC";
			$arOrder[] = $strSearchContentAlias."DATE_CHANGE DESC";
			$this->flagsUseRatingSort = 0x01;
		}
	}

	return " ORDER BY ".implode(", ", $arOrder);
}