Специфікація протоколу HTTP включає в себе кілька різновидів запитів. Один з найбільш поширених запитів є GET запит. GET запит дозволяє запросити файл на сервері, а так само передати серверу якісь параметри, при цьому рядок запиту легко проглядається в адресному рядку браузера.

При формуванні посилань іноді виникає необхідність додавати/видаляти параметри з рядка GET запиту. Щоб передати безліч значень параметрів на сервер GET – запит зручно використовувати багатовимірні масиви. У Bitrix API існує метод CMain::GetCurPageParam, який дозволяє працювати з параметрами поточного запиту. Однак, коли справа доходить до багатовимірних масивів, даний метод має істотні обмеження.

В одному з блогів на сайті битрикса була описана функція, яка є альтернативною заміною штатного функціоналу. Автором функції є Олексій Майдокин, з його згоди публікую вельми корисний код на цьому блозі.

Відмінною особливістю функції стала можливість справлятися з багатовимірними масивами в GET-параметри, а так само працювати з довільними URI. Це може знадобитися, наприклад, при генерації посилань на сторінці, яка підвантажується AJAX’ом.

Параметри функції:

$strParam — Рядок з параметрами, які потрібно додати до повертається значенням.
$arParamKill — Масив параметрів, які необхідно видалити з рядка запиту.
$get_index_page — Параметр вказує, чи потрібно для індексного сторінки розділу повертати шлях, який закінчується на «index.php»
$uri – Рядок GET-запиту (за замовчуванням шлях до поточної сторінки).

Код:

function nfGetCurPageParam( $strParam = “, $arParamKill = array(), $get_index_page = NULL, $uri = FALSE ){
if( NULL === $get_index_page ){
if( defined( ‘BX_DISABLE_INDEX_PAGE’ ) )
$get_index_page = !BX_DISABLE_INDEX_PAGE;
else
$get_index_page = TRUE;
}
$sUrlPath = GetPagePath( $uri, $get_index_page );
$strNavQueryString = nfDeleteParam( $arParamKill, $uri );
if( $strNavQueryString != “&& $strParam != “)
$strNavQueryString = ‘&’.$strNavQueryString;
if( $strNavQueryString == “&& $strParam == ” )
return $sUrlPath;
else
return $sUrlPath.’?’.$strParam.$strNavQueryString;
}
func tion nfDeleteParam( $arParam, $uri = FALSE ){
$get = array();
if( $uri && ( $qPos = strpos( $uri, ‘?’ ) ) !== FALSE ){
$queryString = substr( $uri, $qPos + 1 );
parse_str( $queryString, $get );
unset( $queryString );
}
if( sizeof( $get ) < 1 )
$get = $_GET;
if( sizeof( $get ) 0 ){
foreach( $arParam as $param ){
$search = &$get;
$param = (array)$param;
$lastIndex = sizeof( $param ) – 1;
foreach( $param as $c => $key ){
if( array_key_exists( $key, $search ) ){
if( $c == $lastIndex )
unset( $search[$key] );
else
$search = &$search[$key];
}
}
}
}
return str_r eplace(
array( ‘%5B’, ‘%5D’ ),
array( ‘[‘, ‘]’ ),
http_build_query( $get )
);
}

Приклад використання

Нехай адресу поточної сторінки

/index.php

А нам треба змінити іншу адресу:

/page.php?param1=a¶m2[subparam1]=a1¶m2[subparam2]=a2¶m2[subparam3]=a3¶m3[]=b1¶m3[]=b2

Щоб видалити з нього $_GET[‘param2’][‘subparam2’] і весь $_GET[‘param3’]треба написати

nfGetCurPageParam( “, array( array( ‘param2’, ‘subparam2’ ), ‘param3’ ), NULL, ‘/page.php?param1=a¶m2[subparam1]=a1¶m2[subparam2]=a2¶m2[subparam3]=a3¶m3[]=b1¶m3[]=b2’ )

На виході:

/page.php?param1=a¶m2[subparam1]=a1¶m2[subparam3]=a3

p.s. Висловлюю подяку Олексію Майдокину.

Додав: htmaker, 17.09.2013 р.
(Ще не оцінили)

Завантаження…

Діліться з друзями:

См. також:


Налаштування часу у VMBitrix
Рубрика: Bitrix, Linux

Видалення «кинутих» кошиків в системі Бітрікс
Рубрика: Bitrix

Використання highload-блоків в Bitrix
Рубрика: Bitrix

Як виконати SQL запит в Bitrix
Рубрика: Bitrix

Як підрахувати кількість елементів в Bitrix?
Рубрика: Bitrix

Динамічне масштабування зображень в Bitrix
Рубрика: Bitrix

Виключаємо користувача з ID=1 групи адміністраторів в Bitrix
Рубрика: Bitrix

Як скинути пароль адміністратора у Bitrix?
Рубрика: Bitrix

SQL-запити в бітрікс
Рубрика: Bitrix