Retire el parámetro de edad en la URL (PHP)
-
02-10-2019 - |
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?
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"]:"");
*/