сохранение параметров URL во время разбивки на страницы

Есть ли способ сохранить мои параметры GET при разбиении на страницы.

Моя проблема в том, что у меня есть несколько разных URL-адресов, т.е.

questions.php?sort=votes&author_id=1&page=3 index.php?sort=answers&style=question&page=4 

Как в моем классе pagination я должен создать ссылку на страницу с другим номером страницы на ней, но все же сохранить остальные части URL-адреса?

Solutions Collecting From Web of "сохранение параметров URL во время разбивки на страницы"

Короче говоря, вы просто разбираете URL-адрес, а затем добавляете параметр в конце или заменяете его, если он уже существует.

 $parts = parse_url($url) + array('query' => array()); parse_str($parts['query'], $query); $query['page'] = $page; $parts['query'] = http_build_str($query); $newUrl = http_build_url($parts); 

Этот пример кода требует PHP HTTP-модуль для http_build_url и http_build_str . Более поздняя http_build_query может быть заменена на http_build_query и для первой существует реализация пользовательского пространства PHP, если у вас нет установленного модуля.

Другой альтернативой является использование пакета Net_URL2 , который предлагает интерфейс для различных операций URL:

 $op = new Net_URL2($url); $op->setQueryVariable('page', $page); $newUrl = (string) $op; 

Это более гибко и выразительно.

Вы можете использовать http_build_query () для этого. Это намного чище, чем удаление старого параметра вручную.

Должно быть возможно передать объединенный массив, состоящий из $ _GET и ваших новых значений, и получить чистый URL.

 $new_data = array("currentpage" => "mypage.html"); $full_data = array_merge($_GET, $new_data); // New data will overwrite old entry $url = http_build_query($full_data); 

Если вы хотите написать свою собственную функцию, которая сделала что-то вроде http_build_query, или если вам нужно было настроить ее действия по той или иной причине:

 <?php function add_edit_gets($parameter, $value) { $params = array(); $output = "?"; $firstRun = true; foreach($_GET as $key=>$val) { if($key != $parameter) { if(!$firstRun) { $output .= "&"; } else { $firstRun = false; } $output .= $key."=".urlencode($val); } } if(!$firstRun) $output .= "&"; $output .= $parameter."=".urlencode($value); return htmlentities($output); } ?> 

Тогда вы могли бы просто написать свои ссылки:

 <a href="<?php echo add_edit_gets("page", "2"); ?>">Click to go to page 2</a> 

Как насчет сохранения вашего параметра page в сеансе, поэтому вам не нужно изменять каждый URL-адрес одной страницы?