[SOLUCIONADO] Como controlar la Paginacion a gran escala ??

Iniciado por Diabliyo, 25 Septiembre 2008, 17:24 PM

0 Miembros y 1 Visitante están viendo este tema.

Diabliyo

EDITADO...

Hola:

En la mayoria de mis sistemas web utilizo un par de funciones que me simplifican el trabajo de la paginacion, estas son las funciones:

selector_paginacion() :: Esta funcion genera los numeros de hojas/paginas a mostrar, con ella se manejan diversos argumentos para hacer esta funcion multifuncional y portable.
Código (php) [Seleccionar]
<?php
function selector_paginacion$base$minimo$hoja_actual$enlace$ajax_enlace$capa_ajax )
{
$consconsultar$base"*" ); 

//si existe el numero de registros 'minimo' +1, entonces se producira la paginacion
if( mysql_num_rows($cons)>$minimo )
{
echo "<div id=\"paginacion\">";
$rollceil(mysql_num_rows($cons)/$minimo); //total_registros/minimo

if( !strcmp$ajax_enlace"0") ) //Enlaces normales HTML/PHP
{
if( $hoja_actual>)
echo "<a href=\""$enlace"&pagina=". ($hoja_actual-1). "\">";

echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";

if( $hoja_actual>)
echo "</a>";
for( $i=0$i<$roll$i++ )
{
echo " ";
if( $i==($hoja_actual-1) )
echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
else echo "<a href=\""$enlace"&pagina=". ($i+1). "\"><span>". ($i+1). "</span></a>";
}
echo " ";

if( $hoja_actual<$roll )
echo "<a href=\""$enlace"&pagina=". ($hoja_actual+1). "\">";

echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";

if( $hoja_actual<$roll )
echo "</a>";
}


else //enlaces AJAX
{
if( $hoja_actual>)
echo "<a href=\"#\" onclick=\"cargar_datos( '"$ajax_enlace"&pagina=". ($hoja_actual-1). "', '"$capa_ajax"', 'GET', '0' );\">";

echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";

if( $hoja_actual>)
echo "</a>";
for( $i=0$i<$roll$i++ )
{
echo " ";
if( $i==($hoja_actual-1) )
echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
else echo "<a href=\"#\" onclick=\"cargar_datos( '"$ajax_enlace"&pagina=". ($i+1). "', '"$capa_ajax"', 'GET', '0' );\"><span>". ($i+1). "</span></a>";
}
echo " ";

if( $hoja_actual<$roll )
echo "<a href=\"#\" onclick=\"cargar_datos( '"$ajax_enlace"&pagina=". ($hoja_actual+1). "', '"$capa_ajax"', 'GET', '0' );\">";

echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";

if( $hoja_actual<$roll )
echo "</a>";
}

unset($i);
unset($roll);
echo "</div>";
}

unset($cons);
}
?>


paginacion() :: esta funcion procesa la paginacion, brindando deteccion de errores o acceso a paginas inexistentes :D !!!

Código (php) [Seleccionar]
function paginacion( $pagina, $base, $minimo )
{
$cons= consultar( $base, "*" );

//si existen suficientes registros
if( mysql_num_rows($cons)>$minimo )
{
$max_paginas= ceil(mysql_num_rows($cons)/$minimo); //num. de paginas totales
//echo "<script language=\"javascript\" type=\"text/javascript\">alert('". $max_paginas. "');</script>";

//si estamos en el rango, entonces la consultar es favorable y no estan alterando la consulta
if( $pagina>1 && $pagina<($max_paginas+1) )
return $pagina;
}
return 1;
}


Mi Pregunta es: en la funcion selector_pagina() genero el numero de hojas, pero actualmente tengo mas de 20 hojas y se me ha echo un amontonadero :S, como logro re-paginas las hojas, permitiendo visualizar solo un rango de 10 hojas, ya si existen mas de 10 hojas poder pasar de hoja en hoja sin que se sature la barra donde se muestran las hojas :S !!??


дٳŦ٭

Cita de: Diabliyo en 25 Septiembre 2008, 17:24 PM
Hola:

En la mayoria de mis sistemas web utilizo un par de funciones que me simplifican el trabajo de la paginacion, estas son las funciones:

selector_paginacion() :: Esta funcion genera los numeros de hojas/paginas a mostrar, con ella se manejan diversos argumentos para hacer esta funcion multifuncional y portable.
Código (php) [Seleccionar]
<?php
function selector_paginacion$base$minimo$hoja_actual$enlace$ajax_enlace$capa_ajax )
{
$consconsultar$base"*" ); 

//si existe el numero de registros 'minimo' +1, entonces se producira la paginacion
if( mysql_num_rows($cons)>$minimo )
{
echo "<div id=\"paginacion\">";
$rollceil(mysql_num_rows($cons)/$minimo); //total_registros/minimo

if( !strcmp$ajax_enlace"0") ) //Enlaces normales HTML/PHP
{
if( $hoja_actual>)
echo "<a href=\""$enlace"&pagina=". ($hoja_actual-1). "\">";

echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";

if( $hoja_actual>)
echo "</a>";
for( $i=0$i<$roll$i++ )
{
echo " ";
if( $i==($hoja_actual-1) )
echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
else echo "<a href=\""$enlace"&pagina=". ($i+1). "\"><span>". ($i+1). "</span></a>";
}
echo " ";

if( $hoja_actual<$roll )
echo "<a href=\""$enlace"&pagina=". ($hoja_actual+1). "\">";

echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";

if( $hoja_actual<$roll )
echo "</a>";
}


else //enlaces AJAX
{
if( $hoja_actual>)
echo "<a href=\"#\" onclick=\"cargar_datos( '"$ajax_enlace"&pagina=". ($hoja_actual-1). "', '"$capa_ajax"', 'GET', '0' );\">";

echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";

if( $hoja_actual>)
echo "</a>";
for( $i=0$i<$roll$i++ )
{
echo " ";
if( $i==($hoja_actual-1) )
echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
else echo "<a href=\"#\" onclick=\"cargar_datos( '"$ajax_enlace"&pagina=". ($i+1). "', '"$capa_ajax"', 'GET', '0' );\"><span>". ($i+1). "</span></a>";
}
echo " ";

if( $hoja_actual<$roll )
echo "<a href=\"#\" onclick=\"cargar_datos( '"$ajax_enlace"&pagina=". ($hoja_actual+1). "', '"$capa_ajax"', 'GET', '0' );\">";

echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";

if( $hoja_actual<$roll )
echo "</a>";
}

unset($i);
unset($roll);
echo "</div>";
}

unset($cons);
}
?>


....

Cuál es la pregunta?


Con sangre andaluza :)


alone-in-the-chat

Te recomendaria que coloques algunos parametros como opcionales  ;D.

Y si encontrases la forma de hacerlo mas dinamico  ( cambiar la imagen que muestras, no todos usaran divs por alli alguien quiere usar tablas  ).

Pero se ve interesante , le puede servir a muchos .

Saludos¡¡
Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b

Diabliyo

#3
Diculpen, pero coloque el tema in-completo, acabo de editarlo y lo coloque completo... Lo que sucedio es que publique el tema incompleto porque estaba realizando otra cosa y no pensaba tardarme mucho en completar el tema, mas que nada fue para evitarme que la sesion del foro expirase y tuviese que volver a teclear todo el contenido del POST...

Disculpen mi torpesa, porfavor lean de nuevo el primer post ya que he completado el tema y mi pregunta !!

Disculpen las molestias !!

OJO: Aqui les cuelgo UNA IMAGEN de como se visualiza el exceso de paginacion :S.

bye bye

Hans el Topo

controlando el rango a mostrar y añadíendo siempre el primero y el último

por ejemplo quieres que aparezcan 10 índices de los 100 que tienes
aparecería
<- ir inicio   1 2 3 4 ... 10 -> ir final

si seleccionan el 20  que muestre como índices del 20 al 30

<- ir inicio 20 21 22 ... 30 -> ir final

algo que se suele hacer es mostrar 5 anteriores y 5 posterioes
<- ir inicio 15 16 ... 20  ... 24 25 -> ir final


 

дٳŦ٭

Bueno tu funcion es selector_paginacion() y no selector_pagina().

Si quieres acotar los links de indices deberias paginar los mismos, cuentalos y dividelos entre el numero que desees que aparezca.


Con sangre andaluza :)


Diabliyo

Aqui un update del codigo, ya incluye la paginacion de las hojas mismas, para solo mostrar un rango de 11 hojas siempre :D !!..

Código (php) [Seleccionar]
function selector_paginacion( $base, $minimo, $hoja_actual, $enlace, $ajax_enlace, $capa_ajax )
{
$max_paginas= 11; //maximo numero de paginas a visualizar por panel
$cons= consultar( $base, "*" );

//si existe el numero de registros 'minimo' +1, entonces se producira la paginacion
if( mysql_num_rows($cons)>$minimo )
{
echo "<div id=\"paginacion\">";

//inicio de paginacion
if( $hoja_actual<(ceil($max_paginas/2)+1) )
$roll_start=0;
else
{
if( $hoja_actual<(ceil(mysql_num_rows($cons)/$minimo)-$max_paginas) )
$roll_start= ($hoja_actual-ceil($max_paginas/2));
else
$roll_start= (ceil(mysql_num_rows($cons)/$minimo)-$max_paginas)-1;
}

//maximo de paginacion
if( $hoja_actual<(ceil($max_paginas/2)+1) )
$roll_end= $max_paginas;
else
{
if( $hoja_actual<(ceil(mysql_num_rows($cons)/$minimo)-$max_paginas) )
$roll_end= ($hoja_actual+(ceil($max_paginas/2)))-1;
else
$roll_end= ceil(mysql_num_rows($cons)/$minimo);
}

/*#########################################
########   ENALCES NORMALES/HTML   ########   
#########################################*/
if( !strcmp( $ajax_enlace, "0") )
{
if( $hoja_actual>1 )
echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual-1). "\">";

echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";

if( $hoja_actual>1 )
echo "</a>";
for( $i=$roll_start; $i<$roll_end; $i++ )
{
echo " ";
if( $i==($hoja_actual-1) )
echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
else echo "<a href=\"". $enlace. "&pagina=". ($i+1). "\"><span>". ($i+1). "</span></a>";
}
echo " ";

if( $hoja_actual<$roll_end )
echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual+1). "\">";

echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";

if( $hoja_actual<$roll_end )
echo "</a>";
}


/*#########################################
#############   ENALCES AJAX   ############   
#########################################*/
else
{
if( $hoja_actual>1 )
echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual-1). "', '". $capa_ajax. "', 'GET', '0' );\">";

echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";

if( $hoja_actual>1 )
echo "</a>";
for( $i=$roll_start; $i<$roll_end; $i++ )
{
echo " ";
if( $i==($hoja_actual-1) )
echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
else echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($i+1). "', '". $capa_ajax. "', 'GET', '0' );\"><span>". ($i+1). "</span></a>";
}
echo " ";

if( $hoja_actual<$roll_end )
echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual+1). "', '". $capa_ajax. "', 'GET', '0' );\">";

echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";

if( $hoja_actual<$roll_end )
echo "</a>";
}

unset($i);
unset($roll_start);
unset($roll_end);
echo "</div>";
}

unset($cons);
}

function paginacion( $pagina, $base, $minimo )
{
$cons= consultar( $base, "*" );

//si existen suficientes registros
if( mysql_num_rows($cons)>$minimo )
{
$max_paginas= ceil(mysql_num_rows($cons)/$minimo); //num. de paginas totales
//echo "<script language=\"javascript\" type=\"text/javascript\">alert('". $max_paginas. "');</script>";

//si estamos en el rango, entonces la consultar es favorable y no estan alterando la consulta
if( $pagina>1 && $pagina<($max_paginas+1) )
return $pagina;
}
return 1;
}