|
|
С версии 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",
"confirm_registration"
));
$url = \Askaron\Api\Func::getCurPageParamD7(
[
"logout" => "yes",
"sessid" => bitrix_sessid(),
],
[
"logout", // можно не указывать
"sessid", // можно не указывать
"login",
"register",
"forgot_password",
"change_password",
"confirm_registration"
]
);
Особенность \Askaron\Api\Func::getCurPageParamD7: в примере выше "logout" и "sessid" можно задать в исключениях или не задавать. Влияет только на порядок параметров.
Примеры:
1. Получить текущую страницу с параметрами
$url = \Askaron\Api\Func::getCurPageParamD7();
echo htmlspecialcharsbx($url); // замена & на & для валидаторов 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
);
4. Порядок параметров
Не только первый параметр влияет на порядок параметров, но и второй.
Обратите внимание: в старой функции мы должны были удалять параметр, если мы добавляем его. В новой функции удалять новый параметр не обязательно. Новая функция сама заменит параметр, и не прибавит его.
Однако удалить параметры и прибавить параметры можно: удаление повлияет на порядок параметров, если вам порядок важен. Новые добавленные параметры окажутся в конце строки.
Страница /test.php?test1=2&test2=2&test3=3
$url1 = \Askaron\Api\Func::getCurPageParamD7( ["test1" => 1, "test2" => 2] );
$url2 = \Askaron\Api\Func::getCurPageParamD7( ["test2" => 2, "test1" => 1,] );
$url3 = \Askaron\Api\Func::getCurPageParamD7( ["test1" => 1, "test2" => 2], ["test1", "test2"] );
$url4 = \Askaron\Api\Func::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
Наша статья на сайте Битрикса (там чуть-чуть другое имя функции):
Правильная функция getCurPageParamD7() вместо устаревшей $APPLICATION->GetCurPageParam()
getCatalogGroupIdByName |
Описание курса
| showIf
|