Ver Mensaje Individual
  #2 (permalink)  
Antiguo 22/06/2003, 11:47
dardd
 
Fecha de Ingreso: junio-2003
Mensajes: 102
Antigüedad: 21 años, 5 meses
Puntos: 0
-class.paginado.php:
<?php

class paginado
{
var $_conn;

var $_error;

var $_pagina;
var $_porPagina = 20;
var $_query;
var $_rs;
var $_total;

/**
* Total de Páginas.
*
* Indica la cantidad total de páginas que devuelve la consulta
* contenida en _query.
* @access private
* @since 26/02/2002 12:23:20 p.m.
**/
var $_totalPaginas;
var $_registros;
var $_siguiente = "Siguiente >";
var $_anterior = "< Anterior";

function paginado($Conn)
{
$this->conn($Conn);
} // function

function conn()
{
switch (func_num_args())
{
case 1:
$this->_conn = func_get_arg(0);
break;
default:
return $this->_conn;
break;
}
}

function error()
{
switch (func_num_args())
{
case 1:
$this->_error = func_get_arg(0);
break;
default:
return $this->_error;
break;
}
}

/**
* Método para acceder a $_pagina
*
* @access public
* @since 25/02/2002 05:57:18 p.m.
**/
function pagina()
{
switch (func_num_args())
{
case 1:
$this->_pagina = func_get_arg(0);
$this->_pagina = empty($this->_pagina)?1:$this->_pagina;
break;
default:
return $this->_pagina;
break;
}
} // function

/**
* Método para acceder a $_porPagina
*
* @access public
* @since 25/02/2002 05:31:31 p.m.
**/
function porPagina()
{
switch (func_num_args())
{
case 1:
$this->_porPagina = func_get_arg(0);
break;
default:
return $this->_porPagina;
break;
}
} // function

/**
* Método para acceder a $_total
*
* @access public
* @since 26/02/2002 11:13:19 a.m.
**/
function total()
{
switch (func_num_args())
{
case 1:
$this->_total = func_get_arg(0);
break;
default:
return $this->_total;
break;
}
} // function

/**
* Método para acceder a $_totalPaginas
*
* @access public
* @since 26/02/2002 12:22:59 p.m.
**/
function totalPaginas()
{
switch (func_num_args())
{
case 1:
$this->_totalPaginas = func_get_arg(0);
break;
default:
return $this->_totalPaginas;
break;
}
} // function

function rs()
{
switch (func_num_args())
{
case 1:
$this->_rs = func_get_arg(0);
if(!$this->_rs)
{
return false;
}// Fin If
return true;
break;
default:
return $this->_rs;
break;
}
}

function registros()
{
switch (func_num_args())
{
case 1:
$this->_registros = func_get_arg(0);
break;
default:
return $this->_registros;
break;
}
} // function

/**
* Retorna el indice dentro del Result Set del primer
* elemento de la página actual.
*
* @since 26/02/2002 12:00:12 p.m.
* @return
**/
function desde()
{
return (($this->pagina()-1)*$this->porPagina())+1;
} // function

/**
* Retorna el índice dentro del Result Set del último
* elemento de la página actual.
*
* @since 26/02/2002 12:18:08 p.m.
* @return
**/
function hasta()
{
return ($this->desde()-1)+$this->registros();
} // function

/**
* Ejecuta el Query el base, averiguando previamente la cantidad total de
* registros que devuelve la consulta
*
* @access public
* @since 25/02/2002 05:31:59 p.m.
**/
function query($query)
{
// Primero modificamos el query para averiguar la cantidad total
// de registros que devuelve el query.
$query_count = eregi_replace("select (.*) from", "SELECT COUNT(*) FROM",$query);
if(!$this->rs( @mysql_query($query_count, $this->conn()) ))
{
$this->error("Ocurrió un error al ejecutar el query <i><b>\"$query_count\"</b></i>. La base dijo : <b>".mysql_error()."</b>.");
return false;
}// Fin If
$this->total( mysql_result($this->rs(), 0) );
$this->totalPaginas(ceil($this->total() / $this->porPagina()));

// Comprobamos que no se intenta acceder a una página que no existe.
if( $this->pagina() > $this->totalPaginas() )
{
$this->error("No exite la página ".$this->pagina()." de resutados. Hay solo un total de ".$this->totalPaginas());
return false;
}// Fin If

// Ahora modificamos el Query del usuario, para poder agregarle
// los límites para realizar la paginación
$query .= " LIMIT ".($this->desde()-1).",".$this->porPagina();
if(!$this->rs( @mysql_query($query, $this->conn()) ))
{
$this->error("Ocurrió un error al ejecutar el query \"$query\". La base dijo : ".mysql_error());
return false;
}// Fin If
$this->registros( mysql_num_rows( $this->rs() ));
return true;
} // function

/**
* Retorna un Array asociativo con los datos del siguiente
* registro dentro del Result Set.
*
* @since 26/02/2002 11:21:46 a.m.
* @return
**/
function obtenerArray()
{
return mysql_fetch_array( $this->rs() );
} // function

/**
* Despliega el link hacia la siguiente página
*
* Siempre que quede una página siguiente, se muestra un link
* hacia la siguiente página de resultados.
* El método acepta ser llamado con un parámetro que contenga el
* código HTML que representará al link y que pueda ser representado
* encerrado dentro de un tag <A>.
* @access public
* @since 26/02/2002 01:49:29 p.m.
**/
function siguiente()
{
switch (func_num_args())
{
case 1:
$this->_siguiente = func_get_arg(0);
default:
if($this->hasta() < $this->total())
{
return "<a href=\"?pagina=".($this->pagina()+1).$this->propagar()."\">".$this->_siguiente."</a>";
}// Fin If
break;
}
} // function

/**
* Despliega el link hacia la página anterior.
*
* Siempre que no estemos en la primer página, se muestra un link
* hacia la página anterior de resultados.
* El método acepta ser sllamado con un parámetro que contenga el
* código HTML que representará al link y que pueda ser representado
* encerrado dentro de un tag <A>.
* @access public
* @since 26/02/2002 01:49:29 p.m.
**/
function anterior()
{
switch (func_num_args())
{
case 1:
$this->_anterior = func_get_arg(0);
default:
if($this->pagina() != 1)
{
return "<a href=\"?pagina=".($this->pagina()-1).$this->propagar()."\">".$this->_anterior."</a>";
}// Fin If
break;
}
} // function

/**
* Despliega los números de páginas posibles
*
* Este método muestra una lista de todas las páginas posibles como
* links, excepto la página actual, que se encuentra sin link y resaltada
* en negrita.
* @since 26/02/2002 02:15:36 p.m.
* @return
**/
function nroPaginas()
{
for($i = 1; $i <= $this->totalPaginas() ; $i++)
{
$temp[$i] = "<a href=\"?pagina=$i".$this->propagar()."\">$i</a>";
} // for
$temp[$this->pagina()] = "<b>".$this->pagina()."</b>";
return implode(" | ", $temp);
} // function

/**
* Indica que variables se desean propagar en los links.
*
* Este metodo recibe una lista de nombres que son guarados internamente
* hasta que son creados los links para navegar los resultados. En ese
* momento, son agregados los nombres de las variables con sus valores
* para que puedan ser propagados.
* @since 26/02/2002 02:15:36 p.m.
* @return
**/
function propagar()
{
switch(func_num_args()){
case 0:
foreach($this->_variables as $var) -> 462
$ret.= "&$var=".$GLOBALS[$var];
return $ret; -> 464
break;
default:
for($i = 0; $i < func_num_args(); $i++)
{
$this->_variables[] = func_get_arg($i);
} // for
break;
} // switch
} // function


} // end of class
?>