Foros del Web » Programando para Internet » PHP »

Aporte: Clase para paginación básica

Estas en el tema de Aporte: Clase para paginación básica en el foro de PHP en Foros del Web. Buenas! Estaba viendo que hay mucha gente que aún no comprende bien esto de la paginación, por lo que hice una clase para que de ...
  #1 (permalink)  
Antiguo 07/05/2011, 17:04
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Aporte: Clase para paginación básica

Buenas! Estaba viendo que hay mucha gente que aún no comprende bien esto de la paginación, por lo que hice una clase para que de manera sencilla puedan lograrlo además de que pueden hecharle una leída al código que no es muy extenso para tener una noción respecto a la paginación. Sin más que decir, pongo el código de la clase:
Código PHP:
<?php
/* Clase para paginar resultados. Por Sourcegeek para FDW */
class PagClass {
    
/* Variables internas */
    
var $connection;
    var 
$result;
    var 
$query;
    var 
$regpp;
    var 
$pag;
    
/* Crear conexion a Mysql */
    
public function Connect($a$b$c$d) {
        if (!
$this->connection mysql_connect($a$b$c)) {
            echo 
'Error al conectar con mysql';
            return 
false;
        }
        
$this->SelDB($d);
    }
    
/* Seleccionar la db */
    
private function SelDB($db) {
        if (!
mysql_select_db($db)) {
            echo 
'Error al seleccionar db';
            return 
false;
        }
        return 
true;
    }
    
/* Preparar informacion */
    
public function info($regpp$pag$query) {
        if (!
$pag) {
            
$inicio 0$pag 1;
        }else{
            
$inicio = ($pag 1) * $regpp;
        }
        
$this->pag $pag;
        
$this->regpp $regpp;
        
$this->query mysql_query($query);
        
$this->result mysql_query($query." LIMIT $inicio,$regpp");
    }
    
/* Enviar informacion */
    
public function result() {
        return 
$this->result;
    }
    
/* Pagina anterior */
    
public function ant($txt) {
        if ((
$this->pag 1) > 0) {
            return 
'<a href="?pag='.($this->pag 1).'">'.$txt.'</a>';
        }
    }
    
/* Pagina siguiente */
    
public function sig($txt) {
        
$q mysql_num_rows($this->query);
        
$pagtot ceil($q $this->regpp);
        if ((
$this->pag 1) <= $pagtot) {
            return 
'<a href="?pag='.($this->pag 1).'">'.$txt.'</a>';
        }
    }
}
?>
Ahora, el uso básico de está es más o menos así:
Código PHP:
<?php
// Incluimos la clase de paginacion y creamos nuevo objeto
include('pag.class.php');
$v = new PagClass();

// Abrimos una conexion y establecemos registros por pagina
$v->Connect('localhost''Usuario''Contrasena''BD');
$rpp 4;

// Var de pagina actual. Para que funcionen los links de navegacion,
// debe ser $_GET['pag']
$pa $_GET['pag'];

// La query que deseamos. Atencion de NO usar limit
$query "SELECT * FROM ejemplo ORDER BY hora DESC";

// Enviamos los datos y preparamos la informacion
$v->info($rpp$pa$query);

// Obtenemos la informacion y la mostramos
while ($result mysql_fetch_assoc($v->result)) {
    echo 
"<b>Nombre:</b> {$result['nombre']}";
    echo 
'<hr size="3"></hr>';
}

// Link a pagina anterior, siguiente y mostramos pagina actual
echo $v->ant('Anterior').' | ';
echo 
$v->sig('Siguiente');
echo 
'<br /><br /><br />';
echo 
'Pagina actual: '.$pa;
?>
Como verán el uso es muy sencillo, perfecto para aquellos que entran al mundo de PHP OOP y la paginación.
Se agradecen comentarios, sugerencias y demás.

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #2 (permalink)  
Antiguo 07/05/2011, 17:09
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Aporte: Clase para paginación básica

Estas mezclando programacion de la version 4 de php y e la version 5.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 07/05/2011, 17:15
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Aporte: Clase para paginación básica

Ops no me dí cuenta, perdón D:
Fixed:
Código PHP:
<?php
/* Clase para paginar resultados. Por Sourcegeek para FDW */
class PagClass {
    
/* Variables internas */
    
public $connection;
    public 
$result;
    public 
$query;
    public 
$regpp;
    public 
$pag;
    
/* Crear conexion a Mysql */
    
public function Connect($a$b$c$d) {
        if (!
$this->connection mysql_connect($a$b$c)) {
            echo 
'Error al conectar con mysql';
            return 
false;
        }
        
$this->SelDB($d);
    }
    
/* Seleccionar la db */
    
private function SelDB($db) {
        if (!
mysql_select_db($db)) {
            echo 
'Error al seleccionar db';
            return 
false;
        }
        return 
true;
    }
    
/* Preparar informacion */
    
public function info($regpp$pag$query) {
        if (!
$pag) {
            
$inicio 0$pag 1;
        }else{
            
$inicio = ($pag 1) * $regpp;
        }
        
$this->pag $pag;
        
$this->regpp $regpp;
        
$this->query mysql_query($query);
        
$this->result mysql_query($query." LIMIT $inicio,$regpp");
    }
    
/* Enviar informacion */
    
public function result() {
        return 
$this->result;
    }
    
/* Pagina anterior */
    
public function ant($txt) {
        if ((
$this->pag 1) > 0) {
            return 
'<a href="?pag='.($this->pag 1).'">'.$txt.'</a>';
        }
    }
    
/* Pagina siguiente */
    
public function sig($txt) {
        
$q mysql_num_rows($this->query);
        
$pagtot ceil($q $this->regpp);
        if ((
$this->pag 1) <= $pagtot) {
            return 
'<a href="?pag='.($this->pag 1).'">'.$txt.'</a>';
        }
    }
}
?>
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #4 (permalink)  
Antiguo 07/05/2011, 17:18
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Aporte: Clase para paginación básica

Las propiedades se deben indicar como private o protected por concepto de encapsulamiento.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 07/05/2011, 17:22
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Aporte: Clase para paginación básica

En ese caso:
Código PHP:
    private $connection;
    public 
$result;
    private 
$query;
    private 
$regpp;
    private 
$pag
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #6 (permalink)  
Antiguo 07/05/2011, 17:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 64
Antigüedad: 14 años, 5 meses
Puntos: 1
Respuesta: Aporte: Clase para paginación básica

Hola.

bueno, yo soy el de un post sobre un carrousel con php

en tu clase solo utilizas una consulta general a la tabla de la base de datos.

pero como tu mismo apuntas en el comentario, dices "no usar limit" en la consulta.

ese es el problema que tengo yo, que estoy poniendole un limit a la consulta -porque quiero seleccionar un numero especifico de post con un atributo especifico, pj que van en la columna destacados -y solo los últimos , no en la columna de articulos generales, y todos los destacados, y luego no le puedo poner el limit de la paginacion.

creo que estoy en un error, no se pueden poner dos limit a una consulta. así que creo que tendre que quitarsela a la primera consulta. verdad?

bueno, es una conclusion despues de mucho pensar... es que no se mucho de php
  #7 (permalink)  
Antiguo 07/05/2011, 17:27
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Aporte: Clase para paginación básica

No necesitas 'desviar' este tema para tener mi atención... Si necesitas ayuda, la haría en el respectivo post del problema.
No sé que pretendes hacer con 'carrousel' PHP, que yo sepa esos son jQuery, pero bien, te invito a que analices esta clase y comprendas lo básico en paginación PHP para poder continuar con tu proyecto.

Saludos y suerte
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 07/05/2011, 19:26
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Aporte: Clase para paginación básica

Es más ninguna propiedad debería ser public, en caso de que necesites acceder a una de ellas debes desarrollar lo que se llama getter/setter y si fueras a usar una conección a la base de datos, sería mejor que usaras PDO, para no usar diferentes métodos de programación.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 07/05/2011, 19:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Aporte: Clase para paginación básica

No creo que funcione correctamente esa clase, ya que solamente llamas una sola vez a mysql_query, (en tu método info()), y en el while no iterarias todos los resultados, simplemente te regresaría el primer resultado (y de hecho haces un loop infinito).

Saludos.
  #10 (permalink)  
Antiguo 07/05/2011, 20:11
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 14 años, 11 meses
Puntos: 322
Respuesta: Aporte: Clase para paginación básica

GatorV, la clase si funciona y me muestra los resultados requeridos...
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies

Etiquetas: clase
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 1 personas




La zona horaria es GMT -6. Ahora son las 14:05.