Foros del Web » Programando para Internet » PHP »

[APORTE] Paginacion de resultados sencilla - PaginaEvil

Estas en el tema de [APORTE] Paginacion de resultados sencilla - PaginaEvil en el foro de PHP en Foros del Web. Hola quetal espero les sirva esta sencilla clase llamanda PaginaEvil que cree para paginar los resultados de las consultas SQL. Espero les se a util. ...
  #1 (permalink)  
Antiguo 23/05/2009, 22:12
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
[APORTE] Paginacion de resultados sencilla - PaginaEvil

Hola quetal espero les sirva esta sencilla clase llamanda PaginaEvil que cree para paginar los resultados de las consultas SQL. Espero les se a util.
  • Ademas tiene una hoja de estilos para personalizar el paginador


Código PHP:
class PaginaEvil{
    
    /*************************
    *Nombre  : PaginaEvil
    *Desarrollado por: acoevil
    *correo: [email protected]
    *Version :1.0 Beta
    *para: Foros del web
    **************************
    Modo de uso:
    1: Se realiza un require_once() al archivo .php que contiene la clase
        require_once(PaginaEvil);
        
    
    3: Realizamos la consulta SQL, indicando las tablas a utlizar y las condificones que la
       Consulta deberia de cumplir
       NOTA: No debemos indicar la clausula limit en la conulta
       
        $SQL="select contacto,login from contactos where login='acoevil'";
    
    4: Relizamos la instancia de la clase PaginaEvil donde debemos indicar los sgte parametros
    
        $pagina=new PaginaEvil("mensajeria","","localhost","root",$SQL,7,$rutaCSS);
        
        * Nombre de la base de datos
        * Contraseña de la base de datos
        * Servidor
        * Nombre de usuario de la db
        * $SQL, que es el String que contiene la consulta
        * Numero maximo de resultados que se quieren visualizar por pagina
        * Por ultimo indicamos la ruta donde se encuentra el css por defecto esta en el mismo
          directorio  ( estilos.css )
    
    5:    Accedemos al metodo retorna filas por medio del objeto $pagina y lo asignamos a recurso
    
        $recurso=$pagina->retorna_filas();
    
    6: Se formatea el texto es decir si queremos que los resultados sagan mediante en tablas
       hacemos lo sgte

       Aqui por ejemplo se selecciona el nombre de usurio y el concacto del usuario
       
       * Dentro del $row['nombre_campos']; debemos especificar los mismos campos que
         se colocaron dentro de la variable (   $SQL  )
                     
           ?><table><?
        
while($row=mysql_fetch_array($recurso,MYSQL_ASSOC))
        {
            
?> <tr><td><? echo $row['contacto'];?></td></tr><?
            ?>
 <tr><td><? echo $row['login'];?></td></tr><?
        
}
        
?></table><?
        
        Y la salida seria
        
        
-------------------------------------
        
andres  acoevil
        pepito  acoevil
        otro    acoevil
        
                  
        
|Anterior1 2 3 4 |Siguiente|
        ------------------------------------
    
    
7Por ultimo llamamos el metodo ejecuta por medio del objeto $pagina
        
        $pagina
->ejecuta();
        
        
De esta forma tendriamos los resultados de una consulta SQL organizada por paginas    
        
    
/*************************/
    
    //Configuracion de la base de datos
    
private $nombre_db;
    private 
$contra_db;
    private 
$servidor_db;
    private 
$user_db;
    private 
$conexion_db;
    
//Configurando el paginador
    
private $tam_pagina;
    private 
$can_resultados;
    private 
$can_paginas;
    private 
$dir_actual;
    
//SQL para paginar
    
private $SQL;
    private 
$campoSQL;
    
    private 
$rutaCSS;
    
    function 
__construct($nom,$contra,$servidor,$user,$SQL,$tam_pag="7",$rutaCSS='estilos.css'){
        
//De la base de datos
        
$this->nombre_db=$nom;        $this->servidor_db=$servidor;
        
$this->contra_db=$contra;    $this->user_db=$user;
        
//Del SQL     
        
$this->SQL=$SQL;
        
//Ruta del archivo css
        
$this->rutaCSS=$rutaCSS;
        
        if(empty(
$this->SQL)){
            echo 
"La consulta SQL se encuentra vacia";
            exit;
        }
    
        
//Se realiza la conexion a la base de datos
        
$this->conecta_db();
        
//Del paginador
        
$this->tam_pagina=$tam_pag;
        
$consulta=mysql_query($this->SQL) or die(mysql_error());
        
$this->can_resultados=mysql_num_rows($consulta);
        if(
$this->can_resultados==0){ exit;}
        
?> <style type="text/css">@import url(<? echo $this->rutaCSS?>);</style> <?
        
    
}
    private function 
conecta_db(){
        
$this->conexion_db=mysql_connect($this->servidor_db,$this->user_db,$this->contra_db
        or die(
mysql_error());
        
mysql_select_db($this->nombre_db,$this->conexion_db) or die(mysql_error());
        return 
$this->conexion_db;
    }
    public function 
retorna_filas(){
        
$pag=$_GET['pag'];
        if(
$pag=="" || $pag==0){
            
$pag=1;
        }
            
$pag=($pag-1)*$this->tam_pagina;
            
$resultados=mysql_query($this->SQL." limit "$pag.",".$this->tam_pagina
            or die(
mysql_error());
            
        return 
$resultados;
    }
    public function 
ejecuta(){
        
$this->can_paginas=ceil($this->can_resultados/$this->tam_pagina);
        
$pag=$_GET['pag'];
        
$pagA=$pag-1;
        
$pagS=$pag+1;
        
$this->dir_actual=$_SERVER['REQUEST_URI'];
        
$this->dir_actual=preg_replace('/&pag=(.*)/','',$this->dir_actual);
        
        if(!
preg_match('/\\?/',$this->dir_actual)){
            
$this->dir_actual=$this->dir_actual."?";
            
        }
        
        if(
$pag>1){
            
?> <a href="<? echo $this->dir_actual."&amp;pag=".urlencode($pagA); ?>" class="colorea"> Anterior</a><?
        
}
        echo 
$this->muestra_links($pag);
        
        if(
$pag<$this->can_paginas){
            
?> <a href="<? echo $this->dir_actual."&amp;pag=".urlencode($pagS); ?>" class="colorea"> Siguiente</a><?
        
}
                
    }
    private function 
muestra_links($pag){
        
$inicio=1;
        
$fin=5;
        
        if(
$pag==2){
            
$inicio=1$fin=5;
        }else if(
$pag>=3){
            
$inicio=$pag-2;
            
$fin=$pag+2;
        }
        
        
        for(
$inicio;$inicio<=$fin;$inicio++){
            
$actual='';
            if(
$inicio==$pag){
                
$actual='#8BB033';
            }
?> <a href="<? echo $this->dir_actual."&amp;pag=".urlencode($inicio);?>" class="colorea" style="background:<?  echo $actual;?>"><? echo $inicio?></a><?
            
if($inicio==$this->can_paginas){
                break;
            }
        
        }
        
        
        
    }

    
    
    
    
    
}

/*EJEMPLO COMPLETO DE USO*/
$SQL="select contacto from contactos where login='acoevil'";
$pagina=new PaginaEvil("mensajeria","","localhost","root",$SQL,7);
$recurso=$pagina->retorna_filas();
       
?><table><?
        
while($row=mysql_fetch_array($recurso,MYSQL_ASSOC))
        {
            
?> <tr><td><? echo $row['contacto'];?></td></tr><?
        
}
        
?></table><?
$pagina
->ejecuta();

?>


Este es el css estilos.css



a.colorea{
border:1px solid #123456; /*Bordes de los cuadros que encierran los links |1| */
padding:2px; /*Relleno desde el numero hasta el cuadro | 1 | */
background:#333; /*Color de fondo de cada uno de los links*/
color:#fff; /*Color de la letra*/
text-decoration:none; /*Para que no salga con subrayado*/
}
a.colorea:hover{
background:#5d6e7A; /*Para que cambie el background mientras el puntero esta encima del boton*/
}





Aqui la imagen jeje

http://s3.subirimagenes.com/fotos/pr...95303ejemo.jpg

Última edición por acoevil; 24/06/2009 a las 11:34
  #2 (permalink)  
Antiguo 24/05/2009, 00:36
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

Excelente aporte!
Para mejorarlo solo deberías hacer que el html de la plantilla se incluya como un parámetro y no que la clase lo implemente. Me refiero es que si no quiero usar tablas para la paginación me estas obligando a usarlas. Si quiero usar capas uso capas y si quiero usar tablas uso tabla o texto llano tipo << 1|2|3 >>. Eso se lograría incluyendo la plantilla de la paginación como un parámetro mas de la clase.

Salu2
  #3 (permalink)  
Antiguo 24/05/2009, 05:40
 
Fecha de Ingreso: febrero-2009
Mensajes: 48
Antigüedad: 15 años, 2 meses
Puntos: 0
De acuerdo Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

Muy buen aporte!! A favoritos, Gracias.
  #4 (permalink)  
Antiguo 24/05/2009, 09:04
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

Cita:
Iniciado por usermax Ver Mensaje
Excelente aporte!
Para mejorarlo solo deberías hacer que el html de la plantilla se incluya como un parámetro y no que la clase lo implemente. Me refiero es que si no quiero usar tablas para la paginación me estas obligando a usarlas. Si quiero usar capas uso capas y si quiero usar tablas uso tabla o texto llano tipo << 1|2|3 >>. Eso se lograría incluyendo la plantilla de la paginación como un parámetro mas de la clase.

Salu2
Ok muchas gracias por tu consejo, apenas tenga tiempo lo organizare como dices muchas gracias
  #5 (permalink)  
Antiguo 25/05/2009, 15:45
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

Q tal hace poco hice este aporte al foro y el usuario usermax me escribio y me dijo que deberia de incluir la plantilla como un parametro mas de la clase.

Entonces mi pregunta es como puedo hacer esto? como puedo incluir una plantilla y como usarla alguien me ayuda?
  #6 (permalink)  
Antiguo 25/05/2009, 15:52
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 5 meses
Puntos: 18
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

con respecto a lo de la plantilla, desde mi perspectiva es que escribas una clase que parsee una plantilla.

esta plantilla puede ser un .html o un .tpl que generalmente se utiliza.

Más allá de algunos detalles es bueno que aportes(yo todavía no hice).

suerte.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #7 (permalink)  
Antiguo 25/05/2009, 15:59
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

Muhcas gracias por tu respuesta, pero es que no tengo idea como hacer lo que dices me podrias dar un pequeño ejemplo de partida?
  #8 (permalink)  
Antiguo 25/05/2009, 16:14
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 5 meses
Puntos: 18
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

primero que le pases como parámetro un .tpl, por ejemplo plantilla.tpl en donde contenga variables ejemplo.
Código :
Ver original
  1. <table><tr><td>{var}</td></tr></table>
, la variable en el anterior es var pero delimitado por las llaves,

eso sería uno de los métodos(recibir como parámetro el tpl), en este caso puede ser el constructor.

el segundo método puede ser el que recibe como parámetro un array que contenga el nombre de las variables con sus respectivos valores es decir como clave el nombre de la variable y como valor el valor de dicha variable.

por último un método que abra el tpl, que lea, y que recorra con foreach el tpl y reemplace las variables pasadas como array en el método anterior.

esto sería lo básico, ya que te faltaría validar, por ejemplo que el tpl pasado exista, etc.

suerte.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #9 (permalink)  
Antiguo 25/05/2009, 16:30
Avatar de acoevil  
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

Cita:
Iniciado por argy Ver Mensaje
el segundo método puede ser el que recibe como parámetro un array que contenga el nombre de las variables con sus respectivos valores es decir como clave el nombre de la variable y como valor el valor de dicha variable.
suerte.
Q pena aqui no entendi muy bien me podrias dar un ejemplo mas claro?
  #10 (permalink)  
Antiguo 25/05/2009, 16:43
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 5 meses
Puntos: 18
Respuesta: [APORTE] Paginacion de resultados sencilla - PaginaEvil

ejm.

Código :
Ver original
  1. <?php
  2.  
  3. class Template
  4.  
  5. //declaras algunos atributos de clase
  6.  
  7. public __construc($temlate)
  8. {
  9. //le asignas a una variable de clase el parámetro para poder utilizarlo en cualquier parte de la clase
  10. }
  11. public replaceVars($vars)//este vars al momento de utilizar la clase debe ser un array
  12. {
  13. //haces validaciones y también asignas a una variable de clase.
  14. }
  15. public printTemplate()
  16. {
  17. //éste método debe de encargarse de abrir el template, me supongo que sabes abrir y leer un archivo con php.
  18. //bueno en todo caso te paso lo que hace básicamente una de mis clases
  19. if (!($fd = fopen($this->Files, 'r')))
  20.             {
  21.                 return $this->setError();
  22.             }
  23.             else
  24.             {
  25.                 $template = fread($fd, filesize($this->Files));
  26.                 fclose($fd);
  27.                 $html = $template;
  28.                 $html = str_replace ("'", "\'", $html);
  29.                 $html = preg_replace("|\{([a-z0-9\-_]*?)\}|is", "' . $$1 . '", $html);
  30.                 foreach($this->Vars as $k => $v )
  31.                     {
  32.                         $$k = $v;
  33.                     }
  34.                     eval("\$html = '$html';");
  35.                     foreach($this->Vars as $k => $v )
  36.                     {
  37.                         unset($$k);
  38.                     }
  39.                     $html=str_replace ("\'", "'", $html);
  40.                     return $html;
  41.             }
  42. }
  43. ?>
$this->Files contiene el template
$this->Vars contiene el array
$this->setError() contiene las validaciones del template
un template es del tipo
Código :
Ver original
  1. <table><tr><td>{var}</td></tr></table>

suerte.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
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

SíEste tema le ha gustado a 3 personas




La zona horaria es GMT -6. Ahora son las 10:15.