• Модуль: search
  • Путь к файлу: ~/bitrix/modules/search/classes/general/search.php
  • Класс: CAllSearch
  • Вызов: CAllSearch::Fetch
function Fetch()
{
	static $arSite = array();
	$DB = CDatabase::GetModuleConnection('search');

	$r = parent::Fetch();

	if ($r && $this->formatter)
	{
		$r = $this->formatter->format($r);
		if (!$r)
			return $this->Fetch();
	}

	if ($r)
	{
		$site_id = $r["SITE_ID"];
		if (!isset($arSite[$site_id]))
		{
			$rsSite = CSite::GetList('', '', array("ID" => $site_id));
			$arSite[$site_id] = $rsSite->Fetch();
		}
		$r["DIR"] = $arSite[$site_id]["DIR"];
		$r["SERVER_NAME"] = $arSite[$site_id]["SERVER_NAME"];

		if ($r["SITE_URL"] <> '')
			$r["URL"] = $r["SITE_URL"];

		if (mb_substr($r["URL"], 0, 1) == "=")
		{
			foreach (GetModuleEvents("search", "OnSearchGetURL", true) as $arEvent)
			{
				$newUrl = ExecuteModuleEventEx($arEvent, array($r));
				if (isset($newUrl))
				{
					$r["URL"] = $newUrl;
				}
			}
		}

		$r["URL"] = str_replace(
			array("#LANG#", "#SITE_DIR#", "#SERVER_NAME#"),
			array($r["DIR"], $r["DIR"], $r["SERVER_NAME"]),
			$r["URL"]
		);
		$r["URL"] = preg_replace("'(?Query->m_words;
		if (count($this->url_add_params))
		{
			$p1 = mb_strpos($r["URL"], "?");
			if ($p1 === false)
				$ch = "?";
			else
				$ch = "&";

			$p2 = mb_strpos($r["URL"], "#", $p1);
			if ($p2 === false)
			{
				$r["URL"] = $r["URL"].$ch.implode("&", $this->url_add_params);
			}
			else
			{
				$r["URL"] = mb_substr($r["URL"], 0, $p2).$ch.implode("&", $this->url_add_params).mb_substr($r["URL"], $p2);
			}
		}

		if (!array_key_exists("TITLE_FORMATED", $r) && array_key_exists("TITLE", $r))
		{
			$r["TITLE_FORMATED"] = $this->PrepareSearchResult(htmlspecialcharsEx($r["TITLE"]));
			$r["TITLE_FORMATED_TYPE"] = "html";
			$r["TAGS_FORMATED"] = tags_prepare($r["TAGS"], SITE_ID);
			if ($r["BODY"])
			{
				$r["BODY_FORMATED"] = $this->PrepareSearchResult(htmlspecialcharsEx($r["BODY"]));
				$r["BODY_FORMATED_TYPE"] = "html";
			}
			else
			{
				$max_body_size = COption::GetOptionInt("search", "max_body_size");
				$sqlBody = $max_body_size > 0? "left(BODY,".$max_body_size.") as BODY": "BODY";
				$rsBody = $DB->Query("select $sqlBody from b_search_content where ID=".$r["ID"]);
				if ($arBody = $rsBody->Fetch())
				{
					$r["BODY_FORMATED"] = $this->PrepareSearchResult(htmlspecialcharsEx($arBody["BODY"]));
					$r["BODY_FORMATED_TYPE"] = "html";
				}
			}
		}
	}

	return $r;
}