Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/02/2014, 10:29
Avatar de guardarmicorreo
guardarmicorreo
 
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 12 años, 4 meses
Puntos: 84
Respuesta: Paguinación de un archivo php

Código PHP:
Ver original
  1. <?php
  2.  
  3. //  ==========================
  4. //  = Realiza calculos para paginar resultados =
  5. //  ==========================
  6.  
  7. /*
  8.  * By guardarmicorreo@gmail.com
  9.  */
  10.  
  11.  /*
  12.   * sistema que consiste en una paginación partiendo desde la pagina 0
  13.   *
  14.   * crea un array que consta de los valores para la pagina actual, valores para botones circundantes anteriores a la pagina actual,
  15.   * valores para los botones circundantes posteriores a la pagina actual,
  16.   * un valor para el boton anterior a la pagina actual y un valor para un boton posterior a la pagina actual.
  17.   *
  18.   * tambien incluye el metodo currentPages por si el developer quisiera mostrar el conjunto de resultados
  19.   * que esta utilizando el usuario.
  20.   *
  21.   * ejemplo de resultado final con la configuracion por defecto
  22.   *
  23.   *     surround_before     before_button       page       after_button     surround_after     total_pages     current_pages
  24.   *     0 1 2 3 4               4                5             6            6 7 8 9 10              10         [a partir del registro] 500
  25.   */
  26.  
  27. class Paginator
  28. {
  29.     /*
  30.      * propiedades
  31.      */
  32.      
  33.     //resultados totales
  34.     private $totalResultsSet;
  35.      
  36.     //numero de resultados por pagina
  37.     private $resultsPage = 10;
  38.      
  39.     //numero de pagina actual
  40.     private $page;
  41.    
  42.     //registro actual que esta usando el usuario
  43.     private $currentPages;
  44.    
  45.     //numero de paginas totales
  46.     private $totalPages;
  47.      
  48.     //numero de paginas anteriores
  49.     private $pagesBefore    =   5;
  50.      
  51.     //numero de paginas siguientes
  52.     private $pagesAfter =   5;
  53.    
  54.     //pagina anterior
  55.     private $beforeButton;
  56.    
  57.     //pagina siguiente
  58.     private $afterButton;
  59.    
  60.     //botones circundantes anteriores
  61.     private $surroundBefore   =   array();
  62.    
  63.     //botones circundantes posteriores
  64.     private $surroundAfter  =   array();
  65.          
  66.     //resultado de un metodo
  67.     private $result =   array();
  68.    
  69.     // action URL, para los botones del paginador
  70.     private $url;
  71.    
  72.     //identificador, identifica el objeto que esta paginando
  73.     private    $id;
  74.    
  75.     /*
  76.      * para iniciar tanto las propiedades como los calculos basicos para toda la clase
  77.      *
  78.      *      los parametros son
  79.      * $totalResultsSet = numero total de resultados a paginar en la BD
  80.      * $page            = pagina que solicita el usuario
  81.      * $url             = la url donde se encuentra el usuario; por ejemplo: www.web.com?camisetas (es necesario haber iniciado la url con ?)
  82.      * $id              = id es el identificador del objeto a paginar; por ejemplo: www.web.com?camisetas&color=rojas&page_camisetas=2
  83.      *
  84.      *  (donde "page_camisetas" es el id y "2" es la pagina para mostrar al usuario)
  85.      */
  86.     function    __construct($totalResultsSet, $page, $url, $id)
  87.     {
  88.         $this->totalResultsSet    =   $totalResultsSet;
  89.        
  90.         $this->page =   $page;
  91.        
  92.         $this->totalPages   =   $this->calcTotalPages($totalResultsSet, $this->resultsPage);
  93.        
  94.         $this->currentPage  =   $this->currentPages($page, $this->resultsPage);
  95.        
  96.         $this->url  =   $url;
  97.        
  98.         $this->id   =   $id;
  99.     }
  100.    
  101.     /*
  102.      * calcula las paginas totales/page
  103.      */
  104.     public  function    calcTotalPages($totalResultsSet, $resultsPage)
  105.     {
  106.         //divide los resultados totales entre los resultados a mostrar por pagina
  107.         return  $this->totalPages   =  ceil($totalResultsSet    /   $resultsPage);
  108.     }
  109.    
  110.     /*
  111.      * calcula el conjunto de registros que esta empleando el usuario/currentPages
  112.      */
  113.     public  function    currentPages($page, $resultsPage)
  114.     {
  115.         //multiplica la pagina actual por los resultados por pagina
  116.         return  $this->currentPages  =   ceil($page   *   $resultsPage);
  117.     }
  118.    
  119.     /*
  120.      * calcula las paginas circundantes anteriores/surround_before
  121.      */
  122.     public  function    surroundPagesBefore()
  123.     {  
  124.         //resta la pagina menos el numero de paginas anteriores en el centro
  125.         $pagesBefore  =   $this->page   -   $this->pagesBefore;
  126.        
  127.         //comienza a crear botones hasta llegar a la pagina actual
  128.         for($i=$pagesBefore, $j=1; $i < $this->page AND $j<=$this->pagesBefore; $i++ AND $j++)
  129.         {
  130.             if($i>=0)
  131.             {
  132.                 array_push($this->surroundBefore,   array(
  133.                                                                                         'page'  =>$i,
  134.                                                                                         'url'      =>$this->createURL($this->url, $this->id, $i)
  135.                                                                                         ));
  136.             }
  137.         }
  138.        
  139.         //sino retorna false para que no muestre el boton anterior
  140.         if(empty($this->surroundBefore))
  141.         {
  142.             $this->surroundBefore   =   FALSE;
  143.         }
  144. ?>
__________________
Ayúdame a hacerlo por mi mismo.