elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  [SOLUCIONADO] Como controlar la Paginacion a gran escala ??
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Como controlar la Paginacion a gran escala ??  (Leído 4,236 veces)
Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
[SOLUCIONADO] Como controlar la Paginacion a gran escala ??
« en: 25 Septiembre 2008, 17:24 pm »

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
  1. <?php
  2. function selector_paginacion( $base, $minimo, $hoja_actual, $enlace, $ajax_enlace, $capa_ajax )
  3. {
  4. $cons= consultar( $base, "*" );
  5.  
  6. //si existe el numero de registros 'minimo' +1, entonces se producira la paginacion
  7. if( mysql_num_rows($cons)>$minimo )
  8. {
  9. echo "<div id=\"paginacion\">";
  10. $roll= ceil(mysql_num_rows($cons)/$minimo); //total_registros/minimo
  11.  
  12. if( !strcmp( $ajax_enlace, "0") ) //Enlaces normales HTML/PHP
  13. {
  14. if( $hoja_actual>1 )
  15. echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual-1). "\">";
  16.  
  17. echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";
  18.  
  19. if( $hoja_actual>1 )
  20. echo "</a>";
  21. for( $i=0; $i<$roll; $i++ )
  22. {
  23. echo " ";
  24. if( $i==($hoja_actual-1) )
  25. echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
  26. else echo "<a href=\"". $enlace. "&pagina=". ($i+1). "\"><span>". ($i+1). "</span></a>";
  27. }
  28. echo " ";
  29.  
  30. if( $hoja_actual<$roll )
  31. echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual+1). "\">";
  32.  
  33. echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";
  34.  
  35. if( $hoja_actual<$roll )
  36. echo "</a>";
  37. }
  38.  
  39.  
  40. else //enlaces AJAX
  41. {
  42. if( $hoja_actual>1 )
  43. echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual-1). "', '". $capa_ajax. "', 'GET', '0' );\">";
  44.  
  45. echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";
  46.  
  47. if( $hoja_actual>1 )
  48. echo "</a>";
  49. for( $i=0; $i<$roll; $i++ )
  50. {
  51. echo " ";
  52. if( $i==($hoja_actual-1) )
  53. echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
  54. else echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($i+1). "', '". $capa_ajax. "', 'GET', '0' );\"><span>". ($i+1). "</span></a>";
  55. }
  56. echo " ";
  57.  
  58. if( $hoja_actual<$roll )
  59. echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual+1). "', '". $capa_ajax. "', 'GET', '0' );\">";
  60.  
  61. echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";
  62.  
  63. if( $hoja_actual<$roll )
  64. echo "</a>";
  65. }
  66.  
  67. unset($i);
  68. unset($roll);
  69. echo "</div>";
  70. }
  71.  
  72. unset($cons);
  73. }
  74. ?>

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

Código
  1. function paginacion( $pagina, $base, $minimo )
  2. {
  3. $cons= consultar( $base, "*" );
  4.  
  5. //si existen suficientes registros
  6. if( mysql_num_rows($cons)>$minimo )
  7. {
  8. $max_paginas= ceil(mysql_num_rows($cons)/$minimo); //num. de paginas totales
  9. //echo "<script language=\"javascript\" type=\"text/javascript\">alert('". $max_paginas. "');</script>";
  10.  
  11. //si estamos en el rango, entonces la consultar es favorable y no estan alterando la consulta
  12. if( $pagina>1 && $pagina<($max_paginas+1) )
  13. return $pagina;
  14. }
  15. return 1;
  16. }

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 !!??



« Última modificación: 1 Octubre 2008, 01:44 am por Diabliyo » En línea

дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: Como controlar la Paginacion a gran escala ??
« Respuesta #1 en: 25 Septiembre 2008, 18:27 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
  1. <?php
  2. function selector_paginacion( $base, $minimo, $hoja_actual, $enlace, $ajax_enlace, $capa_ajax )
  3. {
  4. $cons= consultar( $base, "*" );
  5.  
  6. //si existe el numero de registros 'minimo' +1, entonces se producira la paginacion
  7. if( mysql_num_rows($cons)>$minimo )
  8. {
  9. echo "<div id=\"paginacion\">";
  10. $roll= ceil(mysql_num_rows($cons)/$minimo); //total_registros/minimo
  11.  
  12. if( !strcmp( $ajax_enlace, "0") ) //Enlaces normales HTML/PHP
  13. {
  14. if( $hoja_actual>1 )
  15. echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual-1). "\">";
  16.  
  17. echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";
  18.  
  19. if( $hoja_actual>1 )
  20. echo "</a>";
  21. for( $i=0; $i<$roll; $i++ )
  22. {
  23. echo " ";
  24. if( $i==($hoja_actual-1) )
  25. echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
  26. else echo "<a href=\"". $enlace. "&pagina=". ($i+1). "\"><span>". ($i+1). "</span></a>";
  27. }
  28. echo " ";
  29.  
  30. if( $hoja_actual<$roll )
  31. echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual+1). "\">";
  32.  
  33. echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";
  34.  
  35. if( $hoja_actual<$roll )
  36. echo "</a>";
  37. }
  38.  
  39.  
  40. else //enlaces AJAX
  41. {
  42. if( $hoja_actual>1 )
  43. echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual-1). "', '". $capa_ajax. "', 'GET', '0' );\">";
  44.  
  45. echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";
  46.  
  47. if( $hoja_actual>1 )
  48. echo "</a>";
  49. for( $i=0; $i<$roll; $i++ )
  50. {
  51. echo " ";
  52. if( $i==($hoja_actual-1) )
  53. echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
  54. else echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($i+1). "', '". $capa_ajax. "', 'GET', '0' );\"><span>". ($i+1). "</span></a>";
  55. }
  56. echo " ";
  57.  
  58. if( $hoja_actual<$roll )
  59. echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual+1). "', '". $capa_ajax. "', 'GET', '0' );\">";
  60.  
  61. echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";
  62.  
  63. if( $hoja_actual<$roll )
  64. echo "</a>";
  65. }
  66.  
  67. unset($i);
  68. unset($roll);
  69. echo "</div>";
  70. }
  71.  
  72. unset($cons);
  73. }
  74. ?>

....

Cuál es la pregunta?


En línea

alone-in-the-chat


Desconectado Desconectado

Mensajes: 587


Ver Perfil
Re: Como controlar la Paginacion a gran escala ??
« Respuesta #2 en: 25 Septiembre 2008, 18:34 pm »

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¡¡
En línea

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


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Como controlar la Paginacion a gran escala ??
« Respuesta #3 en: 25 Septiembre 2008, 20:57 pm »

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
« Última modificación: 25 Septiembre 2008, 21:14 pm por Diabliyo » En línea

Hans el Topo


Desconectado Desconectado

Mensajes: 1.754


"Estoy cansado de no hacer nada"


Ver Perfil WWW
Re: Como controlar la Paginacion a gran escala ??
« Respuesta #4 en: 25 Septiembre 2008, 23:10 pm »

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


En línea

дٳŦ٭
GNU/Linux Infrastructure Specialist
Ex-Staff
*
Desconectado Desconectado

Mensajes: 5.110


Ver Perfil WWW
Re: Como controlar la Paginacion a gran escala ??
« Respuesta #5 en: 26 Septiembre 2008, 02:59 am »

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.
En línea

Diabliyo


Desconectado Desconectado

Mensajes: 1.441


shell# _


Ver Perfil WWW
Re: Como controlar la Paginacion a gran escala ??
« Respuesta #6 en: 1 Octubre 2008, 01:44 am »

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
  1. function selector_paginacion( $base, $minimo, $hoja_actual, $enlace, $ajax_enlace, $capa_ajax )
  2. {
  3. $max_paginas= 11; //maximo numero de paginas a visualizar por panel
  4. $cons= consultar( $base, "*" );
  5.  
  6. //si existe el numero de registros 'minimo' +1, entonces se producira la paginacion
  7. if( mysql_num_rows($cons)>$minimo )
  8. {
  9. echo "<div id=\"paginacion\">";
  10.  
  11. //inicio de paginacion
  12. if( $hoja_actual<(ceil($max_paginas/2)+1) )
  13. $roll_start=0;
  14. else
  15. {
  16. if( $hoja_actual<(ceil(mysql_num_rows($cons)/$minimo)-$max_paginas) )
  17. $roll_start= ($hoja_actual-ceil($max_paginas/2));
  18. else
  19. $roll_start= (ceil(mysql_num_rows($cons)/$minimo)-$max_paginas)-1;
  20. }
  21.  
  22. //maximo de paginacion
  23. if( $hoja_actual<(ceil($max_paginas/2)+1) )
  24. $roll_end= $max_paginas;
  25. else
  26. {
  27. if( $hoja_actual<(ceil(mysql_num_rows($cons)/$minimo)-$max_paginas) )
  28. $roll_end= ($hoja_actual+(ceil($max_paginas/2)))-1;
  29. else
  30. $roll_end= ceil(mysql_num_rows($cons)/$minimo);
  31. }
  32.  
  33. /*#########################################
  34. ########   ENALCES NORMALES/HTML   ########    
  35. #########################################*/
  36. if( !strcmp( $ajax_enlace, "0") )
  37. {
  38. if( $hoja_actual>1 )
  39. echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual-1). "\">";
  40.  
  41. echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";
  42.  
  43. if( $hoja_actual>1 )
  44. echo "</a>";
  45. for( $i=$roll_start; $i<$roll_end; $i++ )
  46. {
  47. echo " ";
  48. if( $i==($hoja_actual-1) )
  49. echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
  50. else echo "<a href=\"". $enlace. "&pagina=". ($i+1). "\"><span>". ($i+1). "</span></a>";
  51. }
  52. echo " ";
  53.  
  54. if( $hoja_actual<$roll_end )
  55. echo "<a href=\"". $enlace. "&pagina=". ($hoja_actual+1). "\">";
  56.  
  57. echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";
  58.  
  59. if( $hoja_actual<$roll_end )
  60. echo "</a>";
  61. }
  62.  
  63.  
  64. /*#########################################
  65. #############   ENALCES AJAX   ############    
  66. #########################################*/
  67. else
  68. {
  69. if( $hoja_actual>1 )
  70. echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual-1). "', '". $capa_ajax. "', 'GET', '0' );\">";
  71.  
  72. echo "<img src=\"../admin/imagenes/flecha_izquierda.png\" border=\"0\">";
  73.  
  74. if( $hoja_actual>1 )
  75. echo "</a>";
  76. for( $i=$roll_start; $i<$roll_end; $i++ )
  77. {
  78. echo " ";
  79. if( $i==($hoja_actual-1) )
  80. echo "<span style=\"background-color:white;\">". ($i+1). "</span>";
  81. else echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($i+1). "', '". $capa_ajax. "', 'GET', '0' );\"><span>". ($i+1). "</span></a>";
  82. }
  83. echo " ";
  84.  
  85. if( $hoja_actual<$roll_end )
  86. echo "<a href=\"#\" onclick=\"cargar_datos( '". $ajax_enlace. "&pagina=". ($hoja_actual+1). "', '". $capa_ajax. "', 'GET', '0' );\">";
  87.  
  88. echo "<img src=\"../admin/imagenes/flecha_derecha.png\" border=\"0\">";
  89.  
  90. if( $hoja_actual<$roll_end )
  91. echo "</a>";
  92. }
  93.  
  94. unset($i);
  95. unset($roll_start);
  96. unset($roll_end);
  97. echo "</div>";
  98. }
  99.  
  100. unset($cons);
  101. }
  102.  
  103. function paginacion( $pagina, $base, $minimo )
  104. {
  105. $cons= consultar( $base, "*" );
  106.  
  107. //si existen suficientes registros
  108. if( mysql_num_rows($cons)>$minimo )
  109. {
  110. $max_paginas= ceil(mysql_num_rows($cons)/$minimo); //num. de paginas totales
  111. //echo "<script language=\"javascript\" type=\"text/javascript\">alert('". $max_paginas. "');</script>";
  112.  
  113. //si estamos en el rango, entonces la consultar es favorable y no estan alterando la consulta
  114. if( $pagina>1 && $pagina<($max_paginas+1) )
  115. return $pagina;
  116. }
  117. return 1;
  118. }
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines