PHP:Paginacion de resultados (facil)

De Foros del Web

Esta clase te permite paginar los resultados de una base de datos e implementarla de manera sencilla.

El tutorial de explicacion de como utlizar la clase se encuentra en la misma clase

class PaginaEvil{
 
	/*************************
	*Nombre  : PaginaEvil
	*Desarrollado por: acoevil
	*correo: sebastian80_23@hotmail.com
	*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  )
 
	   * Puedes formatear el resultado de la menara que quieras solo necesitas conocer un poco
	     de manejo de capas, tablas o lo que se ha necesario para mostrar el contenido			 		   adecuadamente 
 
   		?><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
 
 
	    |Anterior| 1 2 3 4 |Siguiente|
		------------------------------------
 
	7: Por ultimo llamamos el metodo ejecuta por medio del objeto $pagina
 
		?> <p align="center"> <?$pagina->ejecuta()?></p> <?;
 
		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;
		//Ruta del Template
 
 
		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_ant(){
		$this->varsTemplate['ant']=$this->dir_actual."&amp;pag=".urlencode($pagA);
 
	}
	private function muestra_links_sgt(){
 
	}
 
 
 
	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();
 
?>

-- Usuario 27 May 2009


Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales