Вопрос

Я использую PHP, чтобы создать страницу для таблицы. Я использую следующий код для создания ссылки на страниц

<a class='page-numbers' href='$href&pagenum=$i'>$i</a>

С $ href

$href = $_SERVER['REQUEST_URI'];

Это работает хорошо, однако, он связывается с адресной панелью, добавляя каждый раз, когда новый параметр Pagenum. Так что это становится pagenum = 1 & pagenum = 3 & pagenum = 4 ....

Как это улучшить?

Это было полезно?

Решение

Как насчет этого? Пошел и проверил, чтобы быть уверенным :)

<?php
    $new_get = $_GET; // clone the GET array
    $new_get['pagenum'] = $i; // change the relevant parameter
    $new_get_string = http_build_query($new_get); // create the foo=bar&bar=baz string
?>
<a class="page-numbers" href="?<?php echo $new_get_string; ?>">
    <?php echo $i ?>
</a>

Также обратите внимание, что все $href Бит ненужный. Если вы начнете свой href с ?, браузер применит строку запроса к текущему пути.

Бьюсь об заклад, вы собираетесь зацикливаться, так что вот версия, оптимизированная для производства 10 000 ссылок номера страниц. Мои тесты ставят его немного быстрее в большом количестве ссылок, поскольку вы просто выполняете конкатенацию струны вместо полной сборки запросов HTTP, но этого может быть недостаточно, чтобы стоить беспокоиться. Разница действительно значительна только тогда, когда пять или шесть получают параметры, но, когда есть, эта стратегия завершается примерно через половину времени на моей машине.

<?php
    $pageless_get = $_GET; // clone the GET array
    unset($pageless_get['pagenum']); // remove the pagenum parameter
    $pageless_get_string = http_build_query($pageless_get); // create the foo=bar&bar=baz string
    for($i = 0; $i < 10000; $i++):
        // append the pagenum param to the query string
        $page_param = "pagenum=$i";
        if($pageless_get_string) {
            $pageful_get_string = "$pageless_get_string&$page_param";
        } else {
            $pageful_get_string = $page_param;
        }
?>
    <a class="page-numbers" href="?<?php echo $pageful_get_string; ?>">
        <?php echo $i ?>
    </a>
<?php endfor ?>

Другие советы

$url = $_SERVER['REQUEST_URI'];
$urlparams = parse_url($url);
if(isset($urlparams['query']){
   parse_str($urlparams['query'],$vars);
   $vars['pagenum'] = $i;
   $urlparams['query'] = http_build_query($vars);
} else {
   $urlparams['query'] = 'pagenum='.$i;
}
$url = http_build_url($urlparams);
//http_build_url() is in PECL, you might need to manually rebuild the 
//url by looping through it's components:
/*
   $url=(isset($urlparams["scheme"])?$urlparams["scheme"]."://":"").
       (isset($urlparams["user"])?$urlparams["user"]:"").
       (isset($urlparams["pass"])? ":".$urlparams["pass"]:"").
       (isset($urlparams["user"])?"@":"").
       (isset($urlparams["host"])?$urlparams["host"]:"").
       (isset($urlparams["port"])?":".$urlparams["port"]:"").
       (isset($urlparams["path"])?$urlparams["path"]:"").
       (isset($urlparams["query"])?"?".$urlparams["query"]:"").
       (isset($urlparams["fragment"])?"#".$urlparams["fragment"]:""); 
*/
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top