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