|
С версии 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); // замена & на & для валидаторов 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
);
getCatalogGroupIdByName |
Описание курса
| showIf
|