Есть ли способ сохранить мои параметры GET при разбиении на страницы.
Моя проблема в том, что у меня есть несколько разных URL-адресов, т.е.
questions.php?sort=votes&author_id=1&page=3 index.php?sort=answers&style=question&page=4
Как в моем классе pagination я должен создать ссылку на страницу с другим номером страницы на ней, но все же сохранить остальные части 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-адрес одной страницы?