Функция безнадёжно устарела, и применять её не рекомендуется.
Основная проблема - эта функция берёт параметры из $_GET, а не из URL. у нас появляются новые ключи массива $_GET, старая функция не отличает, какие параметры нужны, а какие не нужны.
В документации сказано, что
\Bitrix\Main\Web\Uri::addParams,
\Bitrix\Main\Web\Uri::deleteParams,
\Bitrix\Main\Web\Uri::getUri.
Но новый готовый аналог старой функции не сделали. Напишем свою функцию самостоятельно.
Может быть когда-нибудь Битрикс сделает такую же в своём ядре:
Получилась полноценная замена.
Примеры:
1. Получить текущую страницу без добавления и удаления параметров
2. Сравнение getCurPageParamD7() с $APPLICATION->GetCurPageParam(), если есть параметры в $_GET
Результат
3. Выход / Регистрация
Старый способ
Новый способ
4. Порядок параметров
Не только первый параметр влияет на порядок параметров, но и второй.
Обратите внимание: в старой функции мы должны были удалять параметр, если мы добавляем его. В новой функции удалять новый параметр не обязательно. Новая функция сама заменит параметр, и не прибавит его.
Однако удалить параметры и прибавить параметры можно: удаление повлияет на порядок параметров, если вам порядок важен. Новые добавленные параметры окажутся в конце строки.
Основная проблема - эта функция берёт параметры из $_GET, а не из URL. у нас появляются новые ключи массива $_GET, старая функция не отличает, какие параметры нужны, а какие не нужны.
В документации сказано, что
\Bitrix\Main\Web\Uri::addParams,
\Bitrix\Main\Web\Uri::deleteParams,
\Bitrix\Main\Web\Uri::getUri.
Но новый готовый аналог старой функции не сделали. Напишем свою функцию самостоятельно.
Может быть когда-нибудь Битрикс сделает такую же в своём ядре:
function getCurPageParamD7( array $arAddParams = [], array $arDeleteParams = [] ): string
{
$result = "";
$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();
return $result;
}
|
Получилась полноценная замена.
Примеры:
1. Получить текущую страницу без добавления и удаления параметров
$url = getCurPageParamD7(); echo htmlspecialcharsbx($url); // Необязательно htmlspecialcharsbx. Замена & на & amp; для валидаторов html. Везде работает, но валидаторы не любят &. |
2. Сравнение getCurPageParamD7() с $APPLICATION->GetCurPageParam(), если есть параметры в $_GET
$_GET['ELEMENT_ID'] = 111; $_GET['SECTIOND_ID'] = 222; echo "<br>".htmlspecialcharsbx( $APPLICATION->GetCurPageParam() ); echo "<br>".htmlspecialcharsbx( getCurPageParamD7() ); |
Результат
/test.php?ELEMENT_ID=111&SECTIOND_ID=222 /test.php |
3. Выход / Регистрация
Старый способ
<?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 = 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 = getCurPageParamD7( [ "register" => "yes", ], [ //"register", // можно не указывать "login", "logout", "forgot_password", "change_password", "confirm_registration" ] ); ?> <a href="<?echo htmlspecialcharsbx($url);?>">Регистрация</a> <?endif;?> |
4. Порядок параметров
Не только первый параметр влияет на порядок параметров, но и второй.
Обратите внимание: в старой функции мы должны были удалять параметр, если мы добавляем его. В новой функции удалять новый параметр не обязательно. Новая функция сама заменит параметр, и не прибавит его.
Однако удалить параметры и прибавить параметры можно: удаление повлияет на порядок параметров, если вам порядок важен. Новые добавленные параметры окажутся в конце строки.
Страница /test.php?test1=2&test2=2&test3=3 $url1 = getCurPageParamD7( ["test1" => 1, "test2" => 2] ); $url2 = getCurPageParamD7( ["test2" => 2, "test1" => 1,] ); $url3 = getCurPageParamD7( ["test1" => 1, "test2" => 2], ["test1", "test2"] ); $url4 = getCurPageParamD7( ["test2" => 2, "test1" => 1,], ["test1", "test2"] ); Результат /test.php?test1=1&test2=2&test3=3 /test.php?test1=1&test2=2&test3=3 /test.php?test3=3&test1=1&test2=2 /test.php?test3=3&test2=2&test1=1 |