Foros del Web » Programando para Internet » PHP »

Paginador de las Faqs del web modestamente mejorado (creo)

Estas en el tema de Paginador de las Faqs del web modestamente mejorado (creo) en el foro de PHP en Foros del Web. Bueno llevo ya unos cuantos días que no hago más que recibir, y creo que ha llegado la hora de aportar algo desde mi modesto ...
  #1 (permalink)  
Antiguo 25/03/2005, 10:23
 
Fecha de Ingreso: noviembre-2002
Mensajes: 59
Antigüedad: 15 años
Puntos: 0
Paginador de las Faqs del web modestamente mejorado (creo)

Bueno llevo ya unos cuantos días que no hago más que recibir, y creo que ha llegado la hora de aportar algo desde mi modesto saber. Pues bien necesitaba un paginador de resultados obtenidos de una base de datos, despues de mucho buscar encontré el que se ofrece en las http://www.faqsdelweb.com/ concretamente el desarrollado por webstudio - Temaqueja. Funciona estupendamente, aunque tenía dos peros, el primero es que siempre mostraba una página de más, y el segundo que no incluia enlaces individuales a las diferentes páginas.

Bien mi aportación es esa la mejora (modesta) de dicho paginador en la siguiente forma:
Código PHP:
<?
/* el script espera que se le pase la variable $paginaActual para mostrar los datos que correspondan a dicha página.
*/
if(!isset($paginaActual)) {
$paginaActual=1;
}
//mostraré 20 resultados por página
$regXpag 20;

// Me conecto a la base de datos...
$db_link mysql_connect("localhost"USUARIOCLAVE);
mysql_select_db("basedatos");


//ejecuto una query para obtener la
//cantidad total de registros...
$sql "SELECT count(*) as cantDatos FROM tabla";
$cantDatos mysql_result(mysql_query($sql,$db_link), 0"cantDatos");


//supongamos que la query devuelve 123
//registros como resultado, osea que 
//$cantDatos será igual a 123

//Divido para obtener cuantas páginas:
// (123/20)+1 = 7.15 (7 páginas)
if($cantDatos<$regXpag) {
$regXpag $cantDatos;
}
@
$final_estimado = ($cantDatos $regXpag);
$sindecimales number_format($final_estimado0);
$resta $final_estimado $sindecimales;
if (
$resta 0){
$sindecimales++ ;
}
$regActual = ($paginaActual*$regXpag)-$regXpag;

//Muestro los datos...
$sql "SELECT * FROM tabla ";
$sql.= "limit $regActual,$regXpag";


$datos mysql_query($sql,$db_link);
while(
$mostrar mysql_fetch_array($datos)) {
echo 
$mostrar['un_campo']. " .otros. <br>";
}
?>
Y el código para poner en cualquier lugar para imprimir el resultado de paginación:

Código PHP:
<!-- paginador -->
<table width="100%"><tr><td width="100%" align=center>
<?
// Muestro en que página está
echo "[Página $paginaActual de $sindecimales]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
// Enlace a la Página Anterior
if($paginaActual>1) {
$paginaAnterior $paginaActual-1;
echo 
"<a href='$PHP_SELF?paginaActual=$paginaAnterior'>Anterior</a> |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
}
// Crear los enlaces hacia las distintas páginas
if ($sindecimales 1){
for(
$i=1;$i<=$sindecimales;$i++){
$b=$i*$regXpag;
echo 
"<a href='$PHP_SELF?paginaActual=$i'> |" $i ."|</a> ";}
}
// Enlace a la Página siguiente
if($paginaActual<$final_estimado) {
$paginaSiguiente $paginaActual+1;
echo 
" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| <a href='$PHP_SELF?paginaActual=$paginaSiguiente'>Siguiente</a>";
}
?> 
</td></tr></table>
<!-- fin paginador -->
En fin lo dicho el mérito en un 99% es de los autore originales lo mío es simplemente un pequeño aporte.
Para ver el código original seguir el siguiente link faqsdelweb paginador

Un saludo Jonai
  #2 (permalink)  
Antiguo 25/03/2005, 18:17
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Una sola pregunta/alcaración (obviamente de metido, por que ni siquiera he leído todo el código y mucho menos probado), pero es correcto esto?:
@$final_estimado = ($cantDatos / $regXpag);
Esto esta en la primer parte, donde seteas evidentemente $final_estimado.
Lo digo por que por ahí es mejor y correcto obligar a que, si no se puede dividir por 0 o alguna razón por la que esto tire error, sea setado en un valor default y no omitido el error?.

Esto es sin ofender ni sacar meritos, por que realmente te felicito (como a todos los que hacen este tipo de aportes), por el esfuerzo puesto.

Salute!
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 26/03/2005, 02:33
 
Fecha de Ingreso: noviembre-2002
Mensajes: 59
Antigüedad: 15 años
Puntos: 0
Verás, yo estoy muy verde, pero que muy verde en estas cuestiones de PHP, por eso aun no puedo (ni se) más allá de lo que has visto, es decir estudiar un código, ver que es lo que me puede interesar y mejorarlo, los script que he hecho hasta el momento estoy seguro que están plagados de errores para la gente que entiende y lee el código sin dificultad. El aporte lo hago desde el código original con unas pequeñas variaciones, nada más.

Y ahora la segunda parte para mejorar el código superior, como hago lo que dices, le pongo algo así:
Código PHP:
if ($regpag == 0){....}else{...} 
De todas formas es un error que sólo se daría si no existen datos en la bd, por lo que es, entiendo yo, asumible. En fin lo dicho si sólo hay que añadir algo similar a lo anterior cométalo y lo hago, jejeje.

Parezco un alumno al que han suspendido con un 4'90 en el examen y quiere aprobar a toda costa (jejeje).

Saludos y gracias nicolaspar.
Nota: Por cierto una web estupenda la tuya, de verdad, estupenda (sólo hecho en falta un enlace hacia los proyectos terminados).

Última edición por jonai; 26/03/2005 a las 02:40
  #4 (permalink)  
Antiguo 26/03/2005, 07:45
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Bueno, pero aunque dices tener un nivel medio, tomaste la iniciativa de mejorar esto (que nuevamente aclaro no he leido:(), y tal vez el aporte sea mayor al que vos crees).

Si el error se da solo en ese caso, es una pavada arreglarlo, aunque no esta mal tener por ahi ese @ en un codigo propio en el que sabemos que siempre vendran datos de la db, y si no lo hace es por que no hay tampoco una conexion activa hacia ella, por ahi, por el hecho de ser un codigo publico estaria bueno solucionarlo. Igual, quien lo haga seguramente lo aportara.


PD: La web fue un capricho que me saque en 10 dias hace nos meses, y no la volvi a actualizar desde entonces...ya tendré tiempo de hacerlo, y gracias por los elogios.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 26/03/2005, 16:46
 
Fecha de Ingreso: marzo-2005
Ubicación: cd. victoria, tamps, mexico
Mensajes: 53
Antigüedad: 12 años, 8 meses
Puntos: 0
Mensaje

Hola, yo tengo otro aporte es mas sencillo que el ejemplo anterior de jonai
Código PHP:

//Limite de res. por pag.    
$limite 25;
//Obtenemos la pag. en la que nos encontramos
$pagina $HTTP_GET_VARS["pagina"];

//Si no existe la variable pagina o esta en blanco...
if(!isset($pagina)){
//significa q estamos en la pagina 1
$inicio 0;
$pagina 1;
}else{
//si no restamos 1 a la pag actual y la multiplicamos por el limite
//para sacar de cual a cual registro habra que extraer de la tabla
$inicio = ($pagina 1) * $limite;
}

//Seleccionamos todo de la tabla buscar
$jfn mysql_query("SELECT * FROM buscar");
//Contamos los registros
$asd mysql_num_rows($jfn);
//Dividimos el total de reg. entre el limite de pag.
$tot_pag ceil($asd $limite);

$sql mysql_query("SELECT * FROM buscar LIMIT $inicio,$limite");

/*Imprimimos todo con la sentencia sql, que especifica extraer 
solamente, el numero menos la pagina que estemos hasta el limite... 
ejemplo 
estamos en la pagina 2....  si cada pagina solo puede tener 25, 
entonces, 

significa que vamos a extraer desde el registro 26 hasta el 50 ya que 
desde el registro 26 es como si fuera contado como 1, 

del 26 al 30 contamos que son 5, y hasta el 50, son 25, es decir el limite, 

y asi le diremos que extraemos solo los resultados del 26 al 50, 
ya que estamos en la pagina 2,  posteriormente imprimimos los 25 
resultados que se piden... dependiendo de la pag. en que estemos... 

Ahora imprimimos
*/

while($p mysql_fetch_array($sql)){
$imagen $p["imagen"];
$pajina$p["pajina"];
echo 
"<a href=\"$pagina\" target=\"_blank\"><img src=\"carpeta/$imagen\" border=\"0\"></a>";
}

//Liberamos espacio 
mysql_free_result($sql);

//Si tenemos mas de una pagina...
if($tot_pag 1){
//Decimos PAGINAS porque son mas d 1 es decir plural...
echo "Paginas: ";
//Hacemos un for, para mostrar todas las paginas disponibles
for($i=1;$i<=$tot_pag;$i++){
//Si estamos en la pagina por ejemplo 2, pues lo ponemos en negritas para
//que el usuario no se confunda y le quitamos el hipervinculo
if($pagina == $i){
echo 
"<font face=\"Tahoma\" size=\"2\"><b>$pagina</b> - </font>";
//si no, ponemos hipervinculo dando a la pagina correspondiente
}else{
echo 
"<font face=\"Tahoma\" size=\"2\"><a href=\"resultados.php?pagina=$i\">$i</a> - </font>";
}
}
}

//Se cierran los corchetes y listo, una paginacion muy muy sencilla 
SaludoS!!
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




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