Domanda

Sto usando PHP per creare un'impaginazione per un tavolo. Sto utilizzando il seguente codice per creare il collegamento impaginazione

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

Con $ href

$href = $_SERVER['REQUEST_URI'];

Funziona bene, tuttavia, pasticci con la barra degli indirizzi, aggiungendo ogni volta che un nuovo parametro pagenum. Così diventa pagenum = 1 & pagenum = 3 & pagenum = 4 ....

Come migliorare questo?

È stato utile?

Soluzione

Che ne dici di questo? È andato e testato, per essere sicuri:)

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

Si noti inoltre che l'intera po $href non è necessaria. Se si avvia il href con ?, il browser verrà applicata la stringa di query al percorso corrente.

Scommetto che sta andando ad essere in loop, però, quindi ecco una versione ottimizzata per la produzione di 10.000 pagine collegamenti numerici. I miei punti di riferimento messo come sempre in modo leggermente più veloce a un gran numero di link, dal momento che si sta solo facendo concatenazione di stringhe, invece di una completa costruzione di query HTTP, ma potrebbe non essere sufficiente per essere un valore di circa preoccupante. La differenza è solo davvero significativo quando cinque o sei parametri GET, ma, quando ci sono, questa strategia si completa in circa la metà del tempo sulla mia macchina.

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

Altri suggerimenti

$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"]:""); 
*/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top