Foros del Web » Programando para Internet » PHP »

paginador php

Estas en el tema de paginador php en el foro de PHP en Foros del Web. Hola amigos estoy buscando por el foro algun ejemplo de como hacer un paginador basico con php y mysql pero los que encuentro en el ...
  #1 (permalink)  
Antiguo 24/06/2011, 13:52
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 10 meses
Puntos: 10
paginador php

Hola amigos estoy buscando por el foro algun ejemplo de como hacer un paginador basico con php y mysql pero los que encuentro en el foro los enlaces ya no existen
nadie sabe donde puedo encontrar un paginador basico facil de adaptar?
saludos.

Última edición por azaz; 24/06/2011 a las 14:00
  #2 (permalink)  
Antiguo 24/06/2011, 14:48
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 8 meses
Puntos: 336
Respuesta: paginador php

pues si que hay muchos en google, pero, azaz tu sabes de PHP, por que no haces tu propio paginador? no es tan dificil, solo vas mostrando por cada valor del pagina un distinto numero de resultados con LIMIT

por ejemplo si estas en la pagina 1 (mipagina.com?pag=1)

lo primero que haces es guardar ese numero en una variable php:

$pagina=$_GET['pag'];

defines la cantidad de resultados por pagina:

$resultados=10;

luego haces una segunda variable para el limit con el mismo numero de la pagina pero menos 1 y lo multiplicas por la cantidad de resultados que quieras mostrar, de modo que en la primera pagina te muestre los primeros 10, en la segunda los siguientes 10, etc

$limit=($pagina-1)*$resultados;

entonces luego haces tu consulta así:

mysql_query("SELECT * FROM tabla LIMIT $limit,$resultados",$con);

como verás pongo en el limit primero desde donde mostrar los resultados, si es la página 5 mostraría desde el resultado 40 hasta el 49.

ahora solo te falta hacer los botones, para ir a la página anterior sería:

"mipagina.com?pag=".($pagina-1);

para ir a la siguiente:

"mipagina.com?pag=".($pagina+1);

para ir a la primera:

"mipagina.com?pag=1";

y para ir a la ultima tendrías que tomar la cantidad máxima de resultados (mysql_fetch_row()) y dividirla por 10 y redondearla al entero inferior, por ejemplo si tienes 75 resultados, los divides por 10 y te dará 7

$last=ceil(75/$resultados);

"mipagina.com?pag=".$last;

luego solo te faltaría hacer unas condiciones para que no muestre la primera página o la página 0 si ya está en la primera página, ni la última página si ya está en la última página.

no es tán díficil en realidad, para que darle crédito a otros por hacer algo que puedes hacer tu mismo? de paso aprender a hacerlo y luego podrás usarlo el resto de tu vida :)

ya es el momento de que hagas tu propio paginador azaz!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D

Última edición por stramin; 24/06/2011 a las 14:54
  #3 (permalink)  
Antiguo 24/06/2011, 15:12
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 8 meses
Puntos: 52
Respuesta: paginador php

Bueno de paginadores ya se ha hablado mucho, si quieres uno facil de implementar mira este excelente paginador con PHP OO solo pasale unos pocos paramentros y lo tenes funcionando al pelo.

http://objetivophp.com/?p=183 Mi amigo Marcelo de Objetivo PHP desarrollo esta increible clase.

Cualquier cosa pregunta!!
__________________
Aprendiendo!!!
  #4 (permalink)  
Antiguo 24/06/2011, 15:40
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: paginador php

gracias por contestar stramin pero estoy aprendiendo php soy novatillo bueno en realidad yo quiero mostrar en paginas los resultados de mi db que van aumentando no me podrias poner algun ejemplo basico.
vi en el foro algun codigo de un paginador pero no consegui hacerlo funcionar.
espero ayuda gracias de todas formas
  #5 (permalink)  
Antiguo 24/06/2011, 15:48
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: paginador php

anacona16 pero ese paginador es para mostrar resultados que estan en array no?
yo quiero mostrar resultados de mi db que van aumentando realmente lo quiero sencillo osea si tengo esta consulta:

Código PHP:
Ver original
  1. $registros=mysql_query ("SELECT * FROM prueba  ",$conexion);
  2.  while($row = mysql_fetch_array($registros)){
  3. //aqui los resultados
  4. }
como tendria que hacer para los resultados tener pagina que se van autoincrementando cuando haigan mas registros
  #6 (permalink)  
Antiguo 24/06/2011, 16:45
 
Fecha de Ingreso: enero-2011
Ubicación: DF
Mensajes: 898
Antigüedad: 13 años, 9 meses
Puntos: 155
Respuesta: paginador php

me late que lo que quieres es esto

http://mx.php.net/manual/es/function...etch-array.php
__________________
No me interesan ni las gracias ni los karmas , pero si que se genere conocimiento, si se dio con la respuesta por favor confirmalo
  #7 (permalink)  
Antiguo 24/06/2011, 17:03
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: paginador php

mogurbon no simplemente quiero un paginator sencillo para mostrar los registros de mi db que se ban incrementando osea un paginator que muestre por decir algo los registros en diez en diez diez para cada pagina alguien me ayuda
  #8 (permalink)  
Antiguo 24/06/2011, 17:12
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 8 meses
Puntos: 52
Respuesta: paginador php

Lo que te pase es lo que necesitas simplemente lee como implemenarlo correctamente, son muy pocos los parametros que debes pasarle y hara justo lo que tu quieres.
__________________
Aprendiendo!!!
  #9 (permalink)  
Antiguo 24/06/2011, 17:29
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: paginador php

anacona16 me puedes ayudar diciendome que es lo que tengo que cambiar
  #10 (permalink)  
Antiguo 24/06/2011, 18:40
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 8 meses
Puntos: 52
Respuesta: paginador php

Ok enpecemos, esta es la clase

Código PHP:
Ver original
  1. <?php
  2. class Paginador
  3. {
  4.     private $_titulos = array('primero'           => array('vista'  => 'Primero',
  5.                                                            'title'  => 'Ir a la primera Pagina'),
  6.                               'bloqueAnterior'    => array('vista'  => '<<',
  7.                                                            'title'  => 'Bloque Anterior'),
  8.                               'anterior'          => array('vista'  => '<',
  9.                                                            'title'  => 'Pagina Anterior'),
  10.                               'siguiente'         => array('vista'  => '>',
  11.                                                            'title'  => 'Pagina Siguiente'),
  12.                               'bloqueSiguiente'   => array('vista'  => '>>',
  13.                                                            'title'  => 'Bloque Siguiente'),
  14.                               'ultimo'            => array('vista'  => 'Ultimo',
  15.                                                            'title'  => 'Ir a la Ultima Pagina'),
  16.                               'numero'            => array('vista'  => null,
  17.                                                            'title'  => 'Ir a la pagina '),
  18.                               'actual'            => array('vista'  => null,
  19.                                                            'title'  => 'Estas viendo esta pagina')
  20.                              );
  21.  
  22.    
  23.     private $_marcador = array('antes'      => '<span class="bg_num_pag">',
  24.                                'despues'    => '</span>');
  25.  
  26.     private $_paginacion = array();
  27.  
  28.    
  29.     private $_cantidadDeRegistrosPorPagina = 10;
  30.  
  31.    
  32.     private $_cantidadDeEnlacesDelPaginador = 10;
  33.  
  34.  
  35.     private $_cantidadPaginas;
  36.  
  37.    
  38.     public function  __construct($crpp = 10, $cep = 10)
  39.     {
  40.         $this->_cantidadDeRegistrosPorPagina    = ((int)$crpp > 0)? $crpp : 10;
  41.         $this->_cantidadDeEnlacesDelPaginador   = ((int)$cep > 0)? $cep : 10;
  42.     }  
  43.    
  44.     public function setCantidadRegistros($cantidad = 10)
  45.     {
  46.         $this->_cantidadDeRegistrosPorPagina    = ((int)$cantidad > 0)? $cantidad : 10;
  47.     }
  48.  
  49.     public function setCantidadEnlaces($cantidad = 10)
  50.     {
  51.         $this->_cantidadDeEnlacesDelPaginador   = ((int)$cantidad > 0)? $cantidad : 10;
  52.     }  
  53.     public function paginar($pagina,$cantidadDeResultados)
  54.     {
  55.         $pagina = ((int)$pagina < 0)? 0 : $pagina;
  56.         if ($cantidadDeResultados < 1) { // No hay resultados que paginar
  57.             return false;
  58.         }
  59.        
  60.         $paginaInicial  = $paginaFinal    = 0;
  61.         $paginacion     = array();
  62.         $totalPaginas   = ceil($cantidadDeResultados / $this->_cantidadDeRegistrosPorPagina);
  63.  
  64.         if ($totalPaginas < 2) {
  65.             $this->_cantidadPaginas = 1;
  66.             return false;
  67.         }
  68.  
  69.         if ($totalPaginas <= $this->_cantidadDeEnlacesDelPaginador) {
  70.             $paginaInicial      = 1;
  71.             $paginaFinal        = $totalPaginas;
  72.         } else {
  73.             $centroPaginador    = floor($this->_cantidadDeEnlacesDelPaginador / 2);
  74.             $paginaInicial      = ($pagina+1) - $centroPaginador;
  75.             $paginaFinal        = $paginaInicial + $this->_cantidadDeEnlacesDelPaginador - 1;
  76.  
  77.             if ($paginaFinal > $totalPaginas) {
  78.                 $paginaFinal    = $totalPaginas;
  79.                 $paginaInicial  = $paginaFinal - ($this->_cantidadDeEnlacesDelPaginador -1);
  80.             }
  81.  
  82.             if ($paginaInicial < 1) {
  83.                 $paginaInicial  = 1;
  84.                 $paginaFinal    = $this->_cantidadDeEnlacesDelPaginador;
  85.             }
  86.         }
  87.  
  88.         $ajuste             = floor($this->_cantidadDeEnlacesDelPaginador / 2);
  89.         $ajuste2            = 1 - ($this->_cantidadDeEnlacesDelPaginador % 2);
  90.         $blockInicio        = $paginaInicial - $this->_cantidadDeEnlacesDelPaginador + $ajuste  - 1;
  91.         $blockFinal         = $paginaFinal + $this->_cantidadDeEnlacesDelPaginador - $ajuste  + $ajuste2;
  92.  
  93.         $paginaInicial      = $paginaInicial - 1;
  94.         $paginaFinal        = $paginaFinal - 1;
  95.  
  96.         if ($totalPaginas > 1) {
  97.             if ($paginaInicial != 0) {
  98.                 $paginacion[] = array('numero'   => 0,
  99.                                       'vista'    => $this->_titulos['primero']['vista'],
  100.                                       'title'    => $this->_titulos['primero']['title']);
  101.             }
  102.         }
  103.        
  104.         if ($blockInicio > $ajuste) {
  105.             $paginacion[]    = array('numero'    => $blockInicio,
  106.                                      'vista'     => $this->_titulos['bloqueAnterior']['vista'],
  107.                                      'title'     => $this->_titulos['bloqueAnterior']['title']);
  108.         }
  109.    
  110.         if($pagina > 0) {
  111.             $paginacion[]    = array('numero'    => $pagina-1,
  112.                                      'vista'     => $this->_titulos['anterior']['vista'],
  113.                                      'title'     => $this->_titulos['anterior']['title']);
  114.         }
  115.        
  116.         for ( $f = $paginaInicial; $f <= $paginaFinal; $f++) {
  117.             if ($f != $pagina) {
  118.                 $paginacion[]= array('numero'    => $f,
  119.                                      'vista'     => $f+1,
  120.                                      'title'     => $this->_titulos['numero']['title'] . ($f+1));
  121.             } else {
  122.                 $paginacion[]= array('numero'    => $f,
  123.                                      'vista'     => $this->_marcador['antes']
  124.                                                  . ($f+1) . $this->_marcador['despues'],
  125.                                      'title'     => $this->_titulos['actual']['title']);
  126.             }
  127.         }
  128.             if ($pagina < ($totalPaginas-1)) {
  129.             $paginacion[]    = array('numero'    => $pagina+1,
  130.                                      'vista'     => $this->_titulos['siguiente']['vista'],
  131.                                      'title'     => $this->_titulos['siguiente']['title']);
  132.         }
  133.        
  134.         if ($paginaFinal < ($totalPaginas - $this->_cantidadDeEnlacesDelPaginador - 1)) {
  135.             $paginacion[]    = array('numero'    => $blockFinal-1,
  136.                                      'vista'     => $this->_titulos['bloqueSiguiente']['vista'],
  137.                                      'title'     => $this->_titulos['bloqueSiguiente']['title']);
  138.         }
  139.        
  140.         if ( $paginaFinal != ($totalPaginas - 1)) {
  141.             $paginacion[]    = array('numero'    => $totalPaginas-1,
  142.                                      'vista'     => $this->_titulos['ultimo']['vista'],
  143.                                      'title'     => $this->_titulos['ultimo']['title']);
  144.         }
  145.         $this->_paginacion      = $paginacion;
  146.         $this->_cantidadPaginas = $totalPaginas;
  147.         return $paginacion;
  148.     }
  149.  
  150.    
  151.     public function setTitulosVista($titulo, $valor)
  152.     {
  153.         if (array_key_exists($titulo, $this->_titulos)) {
  154.            $this->_titulos[$titulo]['vista'] = $valor;
  155.         }
  156.     }
  157.  
  158.    
  159.     public function setTitulosTitle($titulo, $valor)
  160.     {
  161.         if (array_key_exists($titulo, $this->_titulos)) {
  162.            $this->_titulos[$titulo]['title'] = $valor;
  163.         }
  164.     }
  165.  
  166.    
  167.     public function setMarcador($antes, $despues)
  168.     {
  169.         $this->_marcador['antes']   = $antes;
  170.         $this->_marcador['despues'] = $despues;
  171.     }
  172.  
  173.  
  174.     public function getPaginacion()
  175.     {
  176.         return $this->_paginacion;
  177.     }
  178.  
  179.    
  180.     public function getCantidadPaginas()
  181.     {
  182.         return $this->_cantidadPaginas;
  183.     }
  184. }

Ahora este es el codigo para implementarlo

Código PHP:
Ver original
  1. <?php  
  2.     include'paginador.php';
  3.    
  4.     $consulta = mysql_query("SELECT * FROM tb_productos");
  5.     $filas = mysql_num_rows($consulta);
  6.     $cantRegistros  = $filas;
  7.    
  8.     $pgnActual = isset($_GET['pgn'])? $_GET['pgn'] : 0;
  9.    
  10.     $pag = new Paginador();
  11.    
  12.     $datos = $pag->paginar($pgnActual, $cantRegistros);
  13.     $inicio = $pgnActual * 10; 
  14.    
  15.     $consulta = mysql_query("SELECT * FROM tb_productos LIMIT $inicio, 30");
  16. ?>

//Codigo pagina HTML

Código PHP:
Ver original
  1. <?php while($producto = mysql_fetch_array($consulta)): ?>

//Muetras registros en tablas o como quieras

Código PHP:
Ver original
  1. <?php endwhile; ?>

//Mostramos los numero que haran la paginacion 1 2 3 etc

Código PHP:
Ver original
  1. <?php
  2.     if ($datos) :
  3.         echo 'Pagina: ' . ($_GET['pgn'] + 1) . ' de ' . $pag->getCantidadPaginas();
  4.         foreach ($datos as $enlace) :
  5.     ?>
  6.             <a href="?pgn=<?php echo $enlace['numero']; ?>" title="<?php echo $enlace['title']; ?>"><?php echo $enlace['vista']; ?></a>
  7.     <?php endforeach;?>
  8.     <?php endif;?>

Intenta implementarlo y seguimos

Nota: He quitado los cometarios de la clase para poder postear todo el contenido en el foro
__________________
Aprendiendo!!!
  #11 (permalink)  
Antiguo 25/06/2011, 04:39
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: paginador php

Hola anacona16 en primero lugar gracias por tu colaboracion bueno lo intente implemententar asin tengo muchos errores porque no entiendo si va todo en un mismo codigo creo que si lo hice asin espero me sigas ayudando
Código PHP:
Ver original
  1. <?php
  2. //implementacion
  3. include'paginador.php';
  4. $consulta = mysql_query("SELECT * FROM noticias");
  5. $filas = mysql_num_rows($consulta);
  6. $cantRegistros  = $filas;
  7. $pgnActual = isset($_GET['pgn'])? $_GET['pgn'] : 0;
  8. $pag = new Paginador();
  9. $datos = $pag->paginar($pgnActual, $cantRegistros);
  10. $inicio = $pgnActual * 10;
  11. $consulta = mysql_query("SELECT * FROM noticias LIMIT $inicio, 10");
  12.  
  13. //html mostrar registros
  14. while($producto = mysql_fetch_array($consulta)){
  15.     echo "<div>
  16.    <table>
  17.    <tr>
  18.    <td>."$producto['noticias']."</td><td>."$producto['fecha']."</td>
  19.    </tr>
  20.    </table>
  21.    </div>";
  22. }
  23. //mostrar los numeros que haran la paginacion
  24.  
  25. if ($datos) :
  26.  echo 'Pagina: ' . ($_GET['pgn'] + 1) . ' de ' . $pag->getCantidadPaginas();
  27. foreach ($datos as $enlace) :
  28.   ?>
  29.   <a href="?pgn=<?php echo $enlace['numero']; ?>" title="<?php echo $enlace['title']; ?>"><?php echo $enlace['vista']; ?></a>
  30.   <?php endforeach;?>
  31.  <?php endif;?>

Última edición por azaz; 25/06/2011 a las 05:04
  #12 (permalink)  
Antiguo 25/06/2011, 07:56
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 8 meses
Puntos: 52
Respuesta: paginador php

Bueno para empezar si ponlo todo en el mismo codigo, pero que errors tienes?

¿La ruta a la clase esta bien?

Código PHP:
Ver original
  1. include'paginador.php'
__________________
Aprendiendo!!!
  #13 (permalink)  
Antiguo 25/06/2011, 21:12
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 10 meses
Puntos: 10
Respuesta: paginador php

hola anacona16 perdona por la tardanza pero no pude mirarme el codigo bueno mas o menos funciona pero tiene algunos fallos me muestra este error al comienza aunque luego se va y funciona bien
Notice: Undefined index: pgn in C:\wamp\www\pruebas\paginador.php on line 26
otra cosa la linea del paginador sale asin:
Pagina: 1 de 2 |1| 2 >
como tendria que hacer para que saliera por ejemplo cuando esta en la primera pagina algo asin:
1|2>siguiente y si esta en la segun como anterior<1|2>siguiente
bueno espero que me acabes de ayudar saludos
  #14 (permalink)  
Antiguo 26/06/2011, 18:01
Avatar de anacona16  
Fecha de Ingreso: marzo-2010
Ubicación: Bogota DC
Mensajes: 610
Antigüedad: 14 años, 8 meses
Puntos: 52
Respuesta: paginador php

Modifica esta parte del codigo como tu quieras que se muestra

Código PHP:
Ver original
  1. 25.if ($datos) :26. echo 'Pagina: ' . ($_GET['pgn'] + 1) . ' de ' . $pag->getCantidadPaginas();27.foreach ($datos as $enlace) :28.  ?>29.  <a href="?pgn=<?php echo $enlace['numero']; ?>" title="<?php echo $enlace['title']; ?>"><?php echo $enlace['vista']; ?></a>30.  <?php endforeach;?>31. <?php endif;?>

Si quieres cambiar las | busca en la calse, esta linea y pon el simbolo que tu quieras

Código PHP:
Ver original
  1. private $_marcador = array('antes'      => '<span class="bg_num_pag">',24.                               'despues'    => '</span>');

Donde estan los spam
__________________
Aprendiendo!!!

Etiquetas: paginador
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:18.