Páginación de resultados

Seroquel Without Prescription Prednisone No Prescription VPXL For Sale Stromectol Generic Buy Hoodia Online Elavil Without Prescription Synthroid No Prescription Prozac For Sale Toprol XL Generic Buy Cialis Soft Tabs Online

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:

Paso 1

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

Paso 2

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.

Paso 3

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&lt;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 .= '['.$pge.']';
} else {
$page_nav .= ''.$pge.'';
}
}

if($st==0) { $current_page = 1; } else { $current_page = ($st/$pp)+1; }

if($current_page< $pages) {
$page_last = '[>>>]';
$page_next = '[>]';
}

if($st>0) {
$page_first = '[< <<]';
$page_previous = '[< ]';
}
}

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():

  • $total. Número total de resultados que ha devuelto la busqueda. La forma de obtener este valor se ha explicado en el paso 1).
  • $pp. Número de resultados que queremos mostrar por en cada página.
  • $st. Número del primer resultado de la página actual. $st vale 0 en la primera página, en la siguientes valdrá 10, 20, 30, …
  • $url. La dirección completa de las páginas de resultados pero sin el valor de $st. Es decir, si la dirección de una página de resultados es http://tudominio.com/mostrar.php?st=30, el valor de $url debe ser http://tudominio.com/mostrar.php?st=

5 Responses to “Páginación de resultados”

  1. Jandro Says:

    Hay una forma mas sencilla de paginar los resultados. Al hacer la consulta, el numero de pagina se multiplica por el tamaño de la pagina y no hay q hacer ninguna comparacion, solo se necesita saber la pagina actual y el tamaño de la pagina. “SELECT… LIMIT $pag*$tam , $tam” y el resultado de la consulta seran los resultados deseados ya paginados ;)
    Si la pagina es la inicial(0) y el tamaño es 5, se mostraran los registro del 0 al 4 (0,1,2,3,4)
    Si la pagina es la 1, se mostraran los registros del (1*5) al 9 (5,6,7,8,9)… y asi sucesivamente.
    Y calcular la pagina es tan sencillo como incrementar o decrementar en 1 la variable $pag… y si se queire acceder a una pagina en concrto pues solo hay q calcularla.

  2. Aitor Ortuondo Says:

    Jandro, tienes toda la razón… Gracias

  3. helthon Says:

    Estuve viendo el ejemplo pero a mi me sale error

    Parse error: parse error, unexpected ‘=’ in /home/tekken/public_html/clientes5.php on line 52

    Justo en esta funcion :
    if($pages>10)
    {
    $current_page=($st/$pp)+1;
    if($st==0)
    {
    $first_page=0;
    $last_page=10;
    }
    else if($current_page>=5 && $current_page

  4. helthon Says:

    Soeey ya ewncontre el error, pero Quisiera saber si en mi lista hay 50 usuarios inscritos, porque me slae pagina en blanco cuando hago mi consulta :

    http://www.tekkenperu-oficial.com/clientes5.php

    Mis usuarios
    http://www.tekkenperu-oficial.com/clientes.php

    Espero una ayudadita

  5. Anggelo Says:

    OK, pero que pasa si el dato de alguna columna de la tabla desplegada es demaciado grande y quedan filas de distinto tamaño, me entienden??? como podria podria mostrar 10 registros si un campo es demaciado grande… y al imprimir me salen menos de 10 filas ????????? help me!!!

Leave a Reply