La paginación de resultados es la única solución adecuada para poder mostrar al usuario los 4281 resultados que ha devuelto su búsqueda… ¿pero como hacerlo?
Bien, ya sabes lo que quieres. Quieres paginar resultados. ¿Pero como hacerlo? ¿Cuantos resultados por página? ¿Cuantas páginas? ¿Y si resultan que me salen 1000 páginas… muestro un enlace a cada una de ellas? ¿Solo muestro enlaces a las primeras 10 páginas? Y al cambiar de página… ¿que hago? ¿debo volver a hacer la busqueda? Este artículo pretende dar respuesta a todas estas preguntas.
En realidad, paginar resultados es tan fácil como seguir los siguientes 3 pasos:
Hacer una llamada a la base de datos para obtener el número total de resultados de la busqueda y asignar el resultado a una variable que llamaremos $total. Con MySQL la llamada debería ser algo así:
<?php
$get = mysql_query('select count(*) from mitabla where …');
$total = mysql_result($get,0);
?>
Hacer otra llamada que devuelva los resultados de la busqueda, limitando los resultados devueltos mediante las variables $pp y $st. $pp define el número de resultados por páginas. $st define el número, del total de resultados, desde donde empezar a mostrar los resultados en la página actual.
Usando MySQL la llamada será algo así:
<?php
// obtener el valor de $st
if(isset($_GET['st'])) {
$st = $_GET['st'];
} else {
$st = 0;
}
// la llamada a base de datos
$get = mysql_query('select * from mitabla where … limit '.$st.','.$pp);
while($row=@mysql_fetch_row($get)) {
// imprimir resultados
echo $row[0].'<br />';
}
?>
$st es una variable que se obtiene de la dirección de la página actual, por lo que su valor se debe obtener de la variable $_GET[’st’]. En la primera página de resultados $_GET[’st’] no esta definida, por lo que como puedes observar en el código superior tendremos que comprobarlo, y si resulta que no esta definida, tendremos que asignarle el valor 0.
Aplicar la función paginacion() que se muestra a continuación. Esta función se encarga de imprimir una serie de enlaces a las páginas resultantes de la busqueda.
<?php
// resultados por pagina
$pp = 10;
// la función
function paginacion($total,$pp,$st,$url) {
if($total>$pp) {
$resto=$total%$pp;
if($resto==0) {
$pages=$total/$pp;
} else {
$pages=(($total-$resto)/$pp)+1;
}
if($pages>10) {
$current_page=($st/$pp)+1;
if($st==0) {
$first_page=0;
$last_page=10;
} else if($current_page>=5 && $current_page< =($pages-5)) {
$first_page=$current_page-5;
$last_page=$current_page+5;
} else if($current_page<5) {
$first_page=0;
$last_page=$current_page+5+(5-$current_page);
} else {
$first_page=$current_page-5-(($current_page+5)-$pages);
$last_page=$pages;
}
} else {
$first_page=0;
$last_page=$pages;
}
for($i=$first_page;$i< $last_page;$i++) {
$pge=$i+1;
$nextst=$i*$pp;
if($st==$nextst) {
$page_nav .= '<b>['.$pge.']';
} else {
$page_nav .= '<a href="'.$url.$nextst.'">'.$pge.'</a>';
}
}
if($st==0) { $current_page = 1; } else { $current_page = ($st/$pp)+1; }
if($current_page< $pages) {
$page_last = '<b>[<a href="'.$url.($pages-1)*$pp.'">>>></a>]';
$page_next = '[<a href="'.$url.$current_page*$pp.'">></a>]';
}
if($st>0) {
$page_first = '<b>[<a href="'.$url.'0">< <<</a>]</a></b>';
$page_previous = '[<a href="'.$url.''.($current_page-2)*$pp.'">< </a>]';
}
}
return "$page_first $page_previous $page_nav $page_next $page_last";
}
// mostrar resultado de la funcion
echo paginacion($total, $pp, $st, 'http://tudominio.com/mostrar.php?st=');
?>
A continuación una explicación de cada una de las variables que recibe la función paginacion():
Usuarios que han visto este tema también han visto...
- Introducción al PHP y a las librerías
- Ejecutar scripts PHP automáticamente desde el cron con CURL
- Comprimir página PHP
- Detectar el país del visitante con PHP
- Web Service: WSDL y UDDI
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.