Question

J'utilise PHP pour créer une mise en page pour une table. J'utilise le code suivant pour créer le lien de pagination

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

Avec $ href

$href = $_SERVER['REQUEST_URI'];

Il fonctionne bien, cependant, il salit avec la barre d'adresse, en ajoutant chaque fois qu'un nouveau paramètre pagenum. Ainsi, il devient pagenum = 1 & pagenum = 3 & 4 = pagenum ....

Comment améliorer cela?

Était-ce utile?

La solution

Comment cela? Je suis allé et testé, pour être sûr:)

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

En outre, notez que tout bit $href est inutile. Si vous commencez votre href avec ?, le navigateur appliquera la chaîne de requête sur le chemin courant.

Je parie que vous allez être en boucle, cependant, alors voici une version optimisée pour la production de 10 000 liens de numéro de page. Mes points de référence mis comme étant très légèrement plus rapide à un grand nombre de liens, puisque vous faites juste concaténation de chaînes au lieu d'une génération complète de requête HTTP, mais il pourrait ne pas être suffisant pour être une valeur d'environ inquiétante. La différence est seulement vraiment important quand il y a cinq ou six paramètres GET, mais, quand il y a, cette stratégie finalise dans environ la moitié du temps sur ma machine.

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

Autres conseils

$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"]:""); 
*/
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top