Frage

Ich bin mit PHP eine Paginierung für eine Tabelle zu erstellen. Ich bin mit dem folgenden Code der Paginierung Link

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

Mit $ href

$href = $_SERVER['REQUEST_URI'];

Es funktioniert gut, aber vermasselt es mit der Adressleiste, das Hinzufügen jedes Mal einen neuen pagenum Parameter. So wird es pagenum = 1 & pagenum = 3 & pagenum = 4 ....

Wie das verbessern?

War es hilfreich?

Lösung

Wie wäre es damit? Went und getestet, um sicher zu sein:)

<?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>

Beachten Sie auch, dass der ganze $href Bit ist nicht erforderlich. Wenn Sie Ihren href mit ? starten, wird der Browser den Query-String auf den aktuellen Pfad anzuwenden.

Ich wette du gehst zu Looping, obwohl, so ist hier eine Version für die Herstellung von 10.000 Seitenzahl Links optimiert. Mein Benchmarks setzt es als jemals so etwas schneller bei einer großen Anzahl von Verbindungen, da Sie nur String-Verkettung anstelle einer vollständigen HTTP-Abfrage Build zu tun, aber es könnte nicht genug sein, die Mühe wert zu sein. Der Unterschied ist nur dann wirklich von Bedeutung, wenn es fünf oder sechs GET-Parameter, aber, wenn es diese Strategie schließt in etwa der Hälfte der Zeit auf meinem Rechner.

<?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 ?>

Andere Tipps

$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"]:""); 
*/
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top