• Модуль: search
  • Путь к файлу: ~/bitrix/modules/search/classes/mysql/search.php
  • Класс: CSearch
  • Вызов: CSearch::DBNavStart
function DBNavStart()
{
	//total rows count
	$this->NavRecordCount = mysql_num_rows($this->result);
	if($this->NavRecordCount < 1)
		return;

	if($this->NavShowAll)
		$this->NavPageSize = $this->NavRecordCount;

	//calculate total pages depend on rows count. start with 1
	$this->NavPageCount = floor($this->NavRecordCount/$this->NavPageSize);
	if($this->NavRecordCount % $this->NavPageSize > 0)
		$this->NavPageCount++;

	//page number to display. start with 1
	$this->NavPageNomer = ($this->PAGEN < 1 || $this->PAGEN > $this->NavPageCount? ($_SESSION[$this->SESS_PAGEN] < 1 || $_SESSION[$this->SESS_PAGEN] > $this->NavPageCount? 1:$_SESSION[$this->SESS_PAGEN]):$this->PAGEN);

	//rows to skip
	$NavFirstRecordShow = $this->NavPageSize * ($this->NavPageNomer-1);
	$NavLastRecordShow = $this->NavPageSize;

	if($this->SqlTraceIndex)
	{
		list($usec, $sec) = explode(" ", microtime());
		$start_time = ((float)$usec + (float)$sec);
	}

	while($NavFirstRecordShow > 0)
	{
		if(($res = mysql_fetch_array($this->result, MYSQL_ASSOC)))
		{
			if(
				$res["MODULE_ID"] == "forum"
				&& array_key_exists($res["PARAM2"], $this->arForumTopics)
			)
				$this->NavRecordCount--; //eat forum topic duplicates
			elseif(
				$res["module"] == "forum"
				&& array_key_exists($res["param2"], $this->arForumTopics)
			)
				$this->NavRecordCount--; //eat forum topic duplicates
			else
				$NavFirstRecordShow--;

			if($res["MODULE_ID"] == "forum")
				$this->arForumTopics[$res["PARAM2"]] = true;
			elseif($res["module"] == "forum")
				$this->arForumTopics[$res["param2"]] = true;
		}
		else
		{
			break;
		}
	}

	$temp_arrray = array();
	while($NavLastRecordShow > 0)
	{
		if(($res = mysql_fetch_array($this->result, MYSQL_ASSOC)))
		{
			if(
				$res["MODULE_ID"] == "forum"
				&& array_key_exists($res["PARAM2"], $this->arForumTopics)
			)
				$this->NavRecordCount--; //eat forum topic duplicates
			elseif(
				$res["module"] == "forum"
				&& array_key_exists($res["param2"], $this->arForumTopics)
			)
				$this->NavRecordCount--; //eat forum topic duplicates
			else
			{
				if($this->arUserMultyFields)
					foreach($this->arUserMultyFields as $FIELD_NAME=>$flag)
						if($res[$FIELD_NAME])
							$res[$FIELD_NAME] = unserialize($res[$FIELD_NAME]);
				$temp_arrray[] = $res;
				$NavLastRecordShow--;
			}

			if($res["MODULE_ID"] == "forum")
				$this->arForumTopics[$res["PARAM2"]] = true;
			elseif($res["module"] == "forum")
				$this->arForumTopics[$res["param2"]] = true;
		}
		else
		{
			break;
		}
	}

	//Adjust total pages depend on rows count. start with 1
	$this->NavPageCount = floor($this->NavRecordCount/$this->NavPageSize);
	if($this->NavRecordCount % $this->NavPageSize > 0)
		$this->NavPageCount++;

	if($this->SqlTraceIndex)
	{
		list($usec, $sec) = explode(" ", microtime());
		$end_time = ((float)$usec + (float)$sec);
		$exec_time = round($end_time-$start_time, 10);
		$GLOBALS["DB"]->arQueryDebug[$this->SqlTraceIndex - 1]["TIME"] += $exec_time;
		$GLOBALS["DB"]->timeQuery += $exec_time;
	}

	$this->nSelectedCount = $this->NavRecordCount;
	$this->arResult = $temp_arrray;
}