Ver Mensaje Individual
  #10 (permalink)  
Antiguo 24/06/2011, 18:40
Avatar de anacona16
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!!!