Pregunta

Estoy usando PHP para crear una paginación para una mesa. Estoy usando el siguiente código para crear el enlace de paginación

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

Con $ href

$href = $_SERVER['REQUEST_URI'];

Funciona bien, sin embargo, se mete con la barra de direcciones, añadiendo cada vez que un nuevo parámetro pagenum. Por lo tanto, se convierte en pagenum = 1 & pagenum = 3 & pagenum = 4 ....

Como mejorar eso?

¿Fue útil?

Solución

¿Qué tal esto? Fue y probado, para estar seguro:)

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

Además, cabe destacar que todo el rollo $href es innecesaria. Si usted comienza su href con ?, el navegador se aplicará la cadena de consulta a la ruta actual.

apuesto a que va a ser un bucle, sin embargo, lo que aquí es una versión optimizada para la producción de 10.000 páginas enlazan numéricas. Mis puntos de referencia lo ponen como muy ligeramente más rápido en un gran número de enlaces, ya que sólo está haciendo la concatenación de cadenas en lugar de una construcción completa consulta HTTP, pero podría no ser suficiente para un valor de alrededor preocupante. La diferencia sólo es realmente importante cuando hay cinco o seis parámetros GET, pero, cuando existen, esta estrategia se completa en aproximadamente la mitad del tiempo en mi máquina.

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

Otros consejos

$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"]:""); 
*/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top