• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/dbresult.php
  • Класс: CAllDBResult
  • Вызов: CAllDBResult::GetNavParams
static function GetNavParams($nPageSize = 0, $bShowAll = true, $iNumPage = false)
{
	/** @global CMain $APPLICATION */
	global $NavNum, $APPLICATION;

	$bDescPageNumbering = false; //it can be extracted from $nPageSize

	if (is_array($nPageSize))
	{
		$params = $nPageSize;
		if (isset($params["iNumPage"]))
		{
			$iNumPage = $params["iNumPage"];
		}
		if (isset($params["nPageSize"]))
		{
			$nPageSize = $params["nPageSize"];
		}
		if (isset($params["bDescPageNumbering"]))
		{
			$bDescPageNumbering = $params["bDescPageNumbering"];
		}
		if (isset($params["bShowAll"]))
		{
			$bShowAll = $params["bShowAll"];
		}
		if (isset($params["NavShowAll"]))
		{
			$NavShowAll = $params["NavShowAll"];
		}
		if (isset($params["sNavID"]))
		{
			$sNavID = $params["sNavID"];
		}
	}

	$nPageSize = intval($nPageSize);
	$NavNum = intval($NavNum);

	$PAGEN_NAME = "PAGEN_" . ($NavNum + 1);
	$SHOWALL_NAME = "SHOWALL_" . ($NavNum + 1);

	global ${$PAGEN_NAME}, ${$SHOWALL_NAME};

	if ($iNumPage === false)
	{
		$PAGEN = ${$PAGEN_NAME} ?? 0;
	}
	else
	{
		$PAGEN = $iNumPage;
	}

	$PAGEN = (int)$PAGEN;
	$SHOWALL = ${$SHOWALL_NAME};

	$application = MainApplication::getInstance();

	$inSession = (CPageOption::GetOptionString("main", "nav_page_in_session", "Y") == "Y") && $application->getKernelSession()->isStarted();

	if ($inSession)
	{
		$md5Path = md5($sNavID ?? $APPLICATION->GetCurPage());
		$SESS_PAGEN = $md5Path . "SESS_PAGEN_" . ($NavNum + 1);
		$SESS_ALL = $md5Path . "SESS_ALL_" . ($NavNum + 1);

		$localStorage = $application->getLocalSession('navigation');
		$session = $localStorage->getData();
	}

	if ($PAGEN <= 0)
	{
		if ($inSession && isset($session[$SESS_PAGEN]) && $session[$SESS_PAGEN] > 0)
		{
			$PAGEN = $session[$SESS_PAGEN];
		}
		elseif ($bDescPageNumbering === true)
		{
			$PAGEN = 0;
		}
		else
		{
			$PAGEN = 1;
		}
	}

	//Number of records on a page
	$SIZEN = $nPageSize;
	if ($SIZEN < 1)
	{
		$SIZEN = 10;
	}

	//Show all records
	$SHOW_ALL = ($bShowAll && (isset($SHOWALL) ? ($SHOWALL == 1) : ($inSession && isset($session[$SESS_ALL]) && $session[$SESS_ALL] == 1)));

	//$NavShowAll comes from $nPageSize array
	$res = [
		"PAGEN" => $PAGEN,
		"SIZEN" => $SIZEN,
		"SHOW_ALL" => ($NavShowAll ?? $SHOW_ALL),
	];

	if ($inSession)
	{
		$localStorage->set($SESS_PAGEN, $PAGEN);
		$localStorage->set($SESS_ALL, $SHOW_ALL);
		$res["SESS_PAGEN"] = $SESS_PAGEN;
		$res["SESS_ALL"] = $SESS_ALL;
	}

	return $res;
}