Ver Mensaje Individual
  #11 (permalink)  
Antiguo 07/01/2014, 01:20
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: PHP+HTML+URL con $_SERVER

Bueno, he intentado esto último que me dijistes.

El código del paginador que he realizado es este

Código PHP:
Ver original
  1. <?php
  2.  
  3. //  ==========================
  4. //  = Realiza calculos para paginar resultados =
  5. //  ==========================
  6.  
  7. class Paginator
  8. {
  9.     /*
  10.      * propiedades
  11.      */
  12.      
  13.     //resultados totales
  14.     private $totalResultsSet;
  15.      
  16.     //numero de resultados por pagina
  17.     private $resultsPage = 5;
  18.      
  19.     //numero de pagina actual
  20.     private $page;
  21.    
  22.     //registro actual que esta usando el usuario
  23.     private $currentPages;
  24.    
  25.     //numero de paginas totales
  26.     private $totalPages;
  27.      
  28.     //numero de paginas anteriores
  29.     private $pagesBefore    =   5;
  30.      
  31.     //numero de pagina siguiente
  32.     private $pagesAfter =   5;
  33.    
  34.     //pagina anterior
  35.     private $beforeButton;
  36.    
  37.     //pagina siguiente
  38.     private $afterButton;
  39.    
  40.     //botones circundantes anteriores
  41.     private $surroundBefore   =   array();
  42.    
  43.     //botones circundantes posteriores
  44.     private $surroundAfter  =   array();
  45.          
  46.     //resultado de un metodo
  47.     private $result =   array();
  48.    
  49.     // action URL, para los botones del paginador
  50.     private $url;
  51.    
  52.     //identificador, identifica el objeto que esta paginando
  53.     private    $id;
  54.    
  55.     /*
  56.      * para crear tanto las propiedades como para iniciar los calculos basicos para toda la clase
  57.      */
  58.     function    __construct($totalResultsSet, $page, $url, $id)
  59.     {
  60.         $this->totalResultsSet    =   $totalResultsSet;
  61.        
  62.         $this->page =   $page;
  63.        
  64.         $this->totalPages   =   $this->calcTotalPages($totalResultsSet, $this->resultsPage);
  65.        
  66.         $this->currentPage  =   $this->currentPages($page, $this->resultsPage);
  67.        
  68.         $this->url  =   $url;
  69.        
  70.         $this->id   =   $id;
  71.     }
  72.    
  73.     /*
  74.      * calcula las paginas totales
  75.      */
  76.     public  function    calcTotalPages($totalResultsSet, $resultsPage)
  77.     {
  78.         //divide los resultados totales entre los resultados a mostrar por pagina
  79.         return  $this->totalPages   =  ceil($totalResultsSet    /   $resultsPage);
  80.     }
  81.    
  82.     /*
  83.      * calcula el conjunto de registros que esta empleando el usuario
  84.      */
  85.     public  function    currentPages($page, $resultsPage)
  86.     {
  87.         //multiplica la pagina actual por los resultados por pagina
  88.         return  $this->currentPages  =   ceil($page   *   $resultsPage);
  89.     }
  90.    
  91.     /*
  92.      * calcula las paginas circundantes anteriores
  93.      */
  94.     public  function    surroundPagesBefore()
  95.     {  
  96.         //resta la pagina menos el numero de paginas anteriores en el centro
  97.         $pagesBefore  =   $this->page   -   $this->pagesBefore;
  98.        
  99.         //comienza a crear botones hasta llegar a la pagina actual
  100.         for($i=$pagesBefore; $i < $this->page; $i++)
  101.         {
  102.             if($i>=0)
  103.             {
  104.                 array_push($this->surroundBefore,   array(
  105.                                                                                         'page'  =>$i,
  106.                                                                                         'url'      =>$this->createURL($this->url, $this->id, $i)
  107.                                                                                         ));
  108.             }
  109.         }
  110.        
  111.         //sino retorna false para que no muestre el boton anterior
  112.         if(empty($this->surroundBefore))
  113.         {
  114.             $this->surroundBefore   =   FALSE;
  115.         }
  116.        
  117.         return  $this->surroundBefore;
  118.     }
  119.    
  120.     /*
  121.      * calcula las paginas circundantes posteriores
  122.      */
  123.     public  function    surroundPagesAfter()
  124.     {  
  125.         //suma a la pagina actual las paginas configuradas para mostrar despues
  126.         $pagesAfter  =   $this->page   +   $this->pagesAfter;
  127.        
  128.         //comienza a crear tantos botones como paginas sean posibles o menor que la suma anterior
  129.         for($i=$this->page; $i <= $this->totalPages; $i++)
  130.         {
  131.             if($i>$this->page)
  132.             {
  133.                 array_push($this->surroundAfter,   array(
  134.                                                                                         'page'  =>$i,
  135.                                                                                         'url'      =>$this->createURL($this->url, $this->id, $i) //esta es la linea 154 de la clase
  136.                                                                                      ));
  137.             }
  138.         }
  139.        
  140.         //asigna false para que no muestre botones posteriores
  141.         if(empty($this->surroundAfter))
  142.         {
  143.             $this->surroundAfter   =   FALSE;
  144.         }
  145.        
  146.         return  $this->surroundAfter;
  147.     }
  148.    
  149.     /*
  150.      * crea el boton anterior
  151.      */
  152.     public  function    beforeButtons()
  153.     {
  154.         //resta 1 a la pagina actual
  155.         $pageBefore  =   ceil($this->page  -   1);
  156.        
  157.         //si el resultado anterior indica que no da un valor negativo
  158.         if($pageBefore >=0)
  159.         {
  160.             $this->beforeButton  =   array(
  161.                                                                 'page'  =>$pageBefore,
  162.                                                                 'url'      =>$this->createURL($this->url, $this->id, $pageBefore)
  163.                                                                );
  164.         }
  165.        
  166.         //sino asigna false para no mostrar boton anterior
  167.         else
  168.       {
  169.             $this->beforeButton  =   FALSE;
  170.         }
  171.      
  172.         return $this->beforeButton;
  173.     }
  174.    
  175.     /*
  176.      * crea el boton siguiente
  177.      */
  178.     public  function    afterButtons()
  179.     {  
  180.         //suma a la pagina actual 1
  181.         $afterButton    =   $this->page   +   1;
  182.        
  183.         //si el resultado anterior es menor o igual a las paginas totales posibles
  184.         if($afterButton <=  $this->totalPages)
  185.         {
  186.             $this->afterButton  =   array(
  187.                                                              'page'  =>$afterButton,
  188.                                                              'url'      =>$this->createURL($this->url, $this->id, $afterButton)
  189.                                                             );
  190.         }
  191.         else
  192.         {
  193.             $this->afterButton  =   FALSE;
  194.         }
  195.        
  196.         return  $this->afterButton;
  197.     }
  198.    
  199.     /*
  200.      * crea el array definitivo con todos los valores necesarios para todos los botones
  201.      */
  202.     public  function    paginator()
  203.     {
  204.         //comprueba que la pagina que ha enviado el usuario no sea mayor que el total de resultados posibles
  205.         //tampoco que sea inferior a 0
  206.         if($this->page  <=  $this->totalPages   AND $this->page>=0)
  207.         {
  208.             $this->result   =   array(
  209.                                                         'page'=>$this->page,
  210.                                                         'surround_before'   =>$this->surroundPagesBefore(),
  211.                                                         'surround_after'    =>$this->surroundPagesAfter(),
  212.                                                         'before_button' =>$this->beforeButtons(),
  213.                                                         'after_button'  =>$this->afterButtons(),
  214.                                                         'total_pages'   =>$this->totalPages,
  215.                                                         'current_pages' =>$this->currentPages,
  216.                                                         'limit_since' =>$this->currentPages,
  217.                                                         'limit_result_set'  =>$this->resultsPage
  218.                                                     );
  219.                                                                                
  220.         }
  221.        
  222.         //si el usuario intentara romper el paginado poniendo páginas falsas entonces asigna FALSE
  223.         else
  224.       {
  225.             $this->result   =   FALSE;
  226.         }
  227.        
  228.         return  $this->result;
  229.     }
  230.  
  231.     /*
  232.      * busca y sustituye un patron dentro de una URL para
  233.      * eliminar ese patron y sustituirlo para crear una nueva URL
  234.      * evitando repetir el patron en la URL
  235.      *
  236.      * por ejemplo evitar::          ?page=1&page=2&page=3
  237.      */
  238.     public  function    createURL($url, $id, $page)
  239.     {
  240.         //si el identificador no se encuentra en la url
  241.         if(substr_count($url, $id)  ==0)
  242.         {
  243.             //agrega al final de la url el identificador y el valor que le corresponde
  244.             $url  =   $url."&".$id."=".$page;
  245.         }
  246.        
  247.         //sino busca y reemplaza el identificador en la url por su nuevo valor
  248.         else
  249.       {
  250.             $url  =   preg_replace("/(".$id.")/i", $url."&".$id."=".$page, $url);
  251.         }
  252.        
  253.         return  $url;
  254.     }
  255. }
  256. ?>

Pero me indica el siguiente error

Cita:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /var/www/vhosts/miweb.com/httpdocs/models/Paginator.php on line 154
En el código ya está indicada la línea 154.

No se exactamente a qué se refiere ese error, si es que el script utiliza más memoria de la que tengo configurada o es que hay otro tipo de error :S

Recalcar que el script al parecer funciona. del boton 0 al 1 funciona, pero ya en el 2 me da ese error :S
__________________
Ayúdame a hacerlo por mi mismo.