С версии askaron.api 1.5.3

function getCurPageParamD7( array $arAddParams = [], array $arDeleteParams = [] ): string


Функция возвращает текущий URL, добавляет в него параметры, и удаляет из него параметры. Работает аналогично:

$request =  \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
$uriString = $request->getRequestUri();
$uri = new \Bitrix\Main\Web\Uri($uriString);
$uri->deleteParams($arDeleteParams);
$uri->addParams($arAddParams);
$result = $uri->getUri();


Функция написана на D7 Битрикса, чтобы заменить устаревшую $APPLICATION->GetCurPageParam


Особенности и отличия getCurPageParamD7 от $APPLICATION->GetCurPageParam

1. $APPLICATION->GetCurPageParam формирует строку из массива $_GET. Правила настройки ЧПУ из urlrewrite добавляют в массив $_GET поля, которые потом добавляются в URL.


$_GET['ELEMENT_ID'] = 111;
$_GET['SECTIOND_ID'] = 222;

echo "<br>".$APPLICATION->GetCurPageParam();
echo "<br>".\Askaron\Api\Func::getCurPageParamD7();

Результат

/admin/test.php?ELEMENT_ID=111&SECTIOND_ID=222
/admin/test.php


С функцией $APPLICATION->GetCurPageParam надо всегда думать о лишних параметрах из $_GET и добавлять их в исключения. С \Askaron\Api\Func::getCurPageParamD7() так делать не нужно. Функция парсит URL и массив $_GET не использует.


2. $APPLICATION->GetCurPageParam и \Askaron\Api\Func::getCurPageParamD7() удаляют множественные параметры запроса целиком. Они не умеют удалять отдельно test[1]=1 или test[2]=2 из URL

Однако \Askaron\Api\Func::getCurPageParamD7() можно в перспективе научить это делать.

3. $APPLICATION->GetCurPageParam содержит третий параметр, где явно задаётся путь к файлу / или /index.php

getCurPageParamD7 не содержит третий параметр. URL всегда ведет на текущую страницу из URL.

4. $APPLICATION->GetCurPageParam при добавлении параметра не удаляет его из URL, получается 2 параметра с одинаковым именем. Надо обязательно указывать добавленные параметры в список удалённых.

getCurPageParamD7 заменяет параметр если он был. Не обязательно указывать добавленный параметр в списке уделённых.


$url = $APPLICATION->GetCurPageParam("logout=yes&".bitrix_sessid_get(), array(
"logout", // обязательно указывать
"sessid",  // обязательно указывать
"login",
"register",
"forgot_password",
"change_password"));

$url = \Askaron\Api\Func::getCurPageParamD7(
  [
    "logout" => "yes",
    "sessid" => bitrix_sessid(),
  ],
  [
    "logout", // можно не указывать
    "sessid", // можно не указывать
    "login",
    "register",
    "forgot_password",
    "change_password"
  ]
);

Особенность \Askaron\Api\Func::getCurPageParamD7:

В примере выше  "logout" и "sessid" можно задать в исключениях или не задавать.

Если "logout" и "sessid" добавить в исключения $arDeleteParams, то getCurPageParamD7 сформирует порядок параметров строго, как в первом параметре $arAddParams.

Если logout" и "sessid" не будет в исключениях, то порядок параметров "logout" и "sessid" в URL не гарантируется.



Примеры:

1. Получить текущую страницу с параметрами

$url = \Askaron\Api\Func::getCurPageParamD7();
echo htmlspecialcharsbx($url); // замена & на &amp; для валидаторов html.

2. Выход / Регистрация


<?if ($USER->IsAuthorized()):?>
  <?$url = $APPLICATION->GetCurPageParam("logout=yes&".bitrix_sessid_get(), array(
    "logout", // обязательно указывать
    "sessid", // обязательно указывать
    "login",
    "register",
    "forgot_password",
    "change_password",
    "confirm_registration"));
  ?>
  <a href="<?echo htmlspecialcharsbx($url);?>">Закончить сеанс (logout)</a>
<?else:?>
  <?$url = $APPLICATION->GetCurPageParam("register=yes", array(
    "register", // обязательно указывать
    "login",
    "logout",
    "forgot_password",
    "change_password",
    "confirm_registration"));
  ?>
  <a href="<?echo htmlspecialcharsbx($url);?>">Регистрация</a>
<?endif;?>


<?if ($USER->IsAuthorized()):?>
  <?$url = \Askaron\Api\Func::getCurPageParamD7(
  [
    "logout" => "yes",
    "sessid" => bitrix_sessid(),
  ],
  [
      //"logout", // можно не указывать
      //"sessid", // можно не указывать
    "login",
    "register",
    "forgot_password",
    "change_password",
    "confirm_registration"
  ]
  );
  ?>
  <a href="<?echo htmlspecialcharsbx($url);?>">Закончить сеанс (logout)</a>
<?else:?>
  <?$url = \Askaron\Api\Func::getCurPageParamD7(
  [
    "register" => "yes",
  ],
  [
    //"register", // можно не указывать
    "login",
    "logout",
    "forgot_password",
    "change_password",
    "confirm_registration"
  ]
  );
  ?>
  <a href="<?echo htmlspecialcharsbx($url);?>">Регистрация</a>
<?endif;?>


3. Специальные параметры Битрикс

Можно исключить из URL сразу все специальные параметры:

$arDeleteParams = \Bitrix\Main\HttpRequest::getSystemParameters();

Array
(
    [0] => login
    [1] => login_form
    [2] => logout
    [3] => register
    [4] => forgot_password
    [5] => change_password
    [6] => confirm_registration
    [7] => confirm_code
    [8] => confirm_user_id
    [9] => bitrix_include_areas
    [10] => clear_cache
    [11] => show_page_exec_time
    [12] => show_include_exec_time
    [13] => show_sql_stat
    [14] => show_cache_stat
    [15] => show_link_stat
    [16] => sessid
)

$url = \Askaron\Api\Func::getCurPageParamD7(
  [
    "logout" => "yes",
    "sessid" => bitrix_sessid(),
  ],
  $arDeleteParams
);


  







0  


 getCatalogGroupIdByName | Описание курса | showIf