Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Sinedra en 22 Enero 2011, 17:40 pm



Título: Paginacion PHP
Publicado por: Sinedra en 22 Enero 2011, 17:40 pm
Estoy en pleno desarrollo de un sistema de usuarios en PHP/MySQL y he llegado a un punto en que necesito una paginacion de resultados (para mostrar los usuarios registrados), el punto es que no se cual es la mejor forma de hacerlo, he buscado en google pero ninguna se acomoda mucho a la que quiero. para que entiendan mejor:

<< Anterior 1 2 3 4 5 6 7 8 ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8 ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8  ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8  ... 101 Siguiente>>
<< Anterior 1 2 3 4 5 6 7 8  ... 101 Siguiente>>
.
.
.
<< Anterior 1 ... 3 4 5 6 7 8 9  ... 101 Siguiente>>
<< Anterior 1 ... 4 5 6 7 8 9 10 ... 101 Siguiente>>
.
.
.
<< Anterior  1 ... 92 93 94 95 96 97 98 ... 101 Siguiente>>
<< Anterior  1 ... 93 94 95 96 97 98 99 ... 101 Siguiente>>
.
.
.
<< Anterior  1 ...  94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior  1 ...  94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior  1 ...  94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior  1 ...  94 95 96 97 98 99 100 101 Siguiente>>
<< Anterior  1 ...  94 95 96 97 98 99 100 101 Siguiente>>

Porfavor alguien orienteme como puedo hacer algo de este estilo.

Si alguien me quiere ayudar porfavor envienme un PM con su msn para hablar mas rapido. Gracias


Título: Re: Paginacion PHP
Publicado por: RedZer en 22 Enero 2011, 18:38 pm
quiza este te sriva

http://phppaging.phperu.net/


Título: Re: Paginacion PHP
Publicado por: Sinedra en 22 Enero 2011, 19:20 pm
Gracias, me sirvio de algo.


Título: Re: Paginacion PHP
Publicado por: Diabliyo en 22 Enero 2011, 19:46 pm
Gracias, me sirvio de algo.

Men, si has echo un sistema de usuarios, la paginacion es pan comido, vaya.... asumiendo que programaste ya un sistema.

La cosa es usar consultar con LIMIT y utilizar una variable que te sirva como punto de referencia para saber que rango mostrar ( $_GET["pagina"] )...

saludos !


Título: Re: Paginacion PHP
Publicado por: tragantras en 22 Enero 2011, 20:54 pm
[asumiendo una conexión pre-establecida]

Código
  1. $query = mysql_query("SELECT COUNT(*) FROM `my_tabla`");
  2. $query_result = mysql_fetch_array($query);
  3.  
  4.  
  5.  
  6. $count = $query_result[0];
  7. $max_results = 20;
  8. $pages = ceil($count/$max_results);
  9.  
  10. if(isset($_GET["pagina"])){
  11. $pagina = intval($_GET["pagina"]);
  12. else{
  13. $pagina = 0;
  14. }
  15.  
  16. $query = mysql_query("SELECT * from `my_tabla` limit {$pagina},{$max_results}";
  17. $query_result = mysql_fetch_assoc($query);
  18. foreach($query_result as $key => $val)
  19. {
  20. echo "{$key} : {$val}".PHP_EOL;
  21. }
  22. echo "</br></br>";
  23. echo "<b>&gt;</b>";
  24. for($i=0;$i<$pages;$i++)
  25. {
  26. echo "<a href='./index.php?pagina={$i}'> {$i} </a>&nbsp;";
  27. }
  28. echo "<b>&lt;</b>";
  29.  






es solo el esqueleto de lo que tu quieres, pero plasma la idea


Título: Re: Paginacion PHP
Publicado por: Shell Root en 22 Enero 2011, 21:15 pm
:http://www.desarrolloweb.com/articulos/1035.php


Título: Re: Paginacion PHP
Publicado por: Sinedra en 23 Enero 2011, 00:08 am
Muchas gracias a todos por la ayuda!, muy amables, les cuento que tras un largo dia de programacion la paginacion me quedo de lujo =) gracias por ayudarme.

Saludos



Título: Re: Paginacion PHP
Publicado por: Shell Root en 23 Enero 2011, 00:15 am
Podrías poner el código para verlo...


Título: Re: Paginacion PHP
Publicado por: Sinedra en 23 Enero 2011, 00:25 am
jeje esque tiene unas 305 lineas, sin contar las funciones extras. pronto cuando estrene el proyecto en que ando les dejo un link aqui para que lo vean. Saludos.


Título: Re: Paginacion PHP
Publicado por: Diabliyo en 23 Enero 2011, 17:11 pm
jeje esque tiene unas 305 lineas, sin contar las funciones extras. pronto cuando estrene el proyecto en que ando les dejo un link aqui para que lo vean. Saludos.

Wow 305 lineas es mucho, entonces me imagino que tienes un mezcladero horrendo no ?... porque una buena paginacion no hiria mas haya de las 100 lineas :S...

Te recomiendo uses 2 funciones:

paginacion()

paginacion_rollout()

La funcion paginacion() toma argumentos que le sirven para hacer la paginacion segun el limite de inicio y fin, toma la bdd y genera una consulta que despues puedes usar con mysql_fetch_array().

Y paginacion_rollout() crea el roll out de las paginas, tomandos los mismos argumentos que le paseste a paginacion(), esta deduce las paginas, Y podra retornarte el HTML a pegar (ya tu le concatenas una capa) o que lo imprima directo dentro de la funcion (aunque seria poco recomendable).

Saludos !


Título: Re: Paginacion PHP
Publicado por: Sinedra en 23 Enero 2011, 17:46 pm
Gracias creo que seguire tu consejo, la paginacion solamente tiene unas 120 lineas solo puse 2 veces el mismo codigo pq tb le implemente un buscador, pero en si tiene como 120 lineas


Título: Re: Paginacion PHP
Publicado por: el_quick en 26 Noviembre 2011, 00:34 am
kpaginate es una excelente clase para paginación en php (http://www.aprender-a-programar.com/paginacion-php), te la recomiendo! http://www.aprender-a-programar.com/paginacion-php


Título: Re: Paginacion PHP
Publicado por: WHK en 26 Noviembre 2011, 23:05 pm
Talves puedas complementarla con la clase que hize hace algun tiempo para hacer paginadores a partir de una query mysql:

Código
  1. <?php if($_SERVER['SCRIPT_FILENAME'] == __file__) exit;
  2. /*
  3. FrameworkDrawCoders : 3.*
  4. Last modification : 29-4-2011
  5. Class version : 1.2
  6. */
  7.  
  8. class paginator{
  9.  
  10. /* Results */
  11. var $total_items;
  12. var $total_pages;
  13. var $actual_page;
  14. var $actual_url;
  15. var $matrix_content;
  16. var $matrix_paginator;
  17.  
  18. /* Configurations */
  19. var $items_by_page = 15;
  20. var $pages_by_screen = 10;
  21. var $page_var = '_p';
  22. var $custom_css = false;
  23. var $base_url; /* Blank. Change in function. */
  24.  
  25. /* Libs */
  26. var $sql;
  27.  
  28. /* System Vars */
  29. var $last_error;
  30. var $libs_need;
  31.  
  32. /* Default libs */
  33. var $conf;
  34. var $str;
  35. var $path;
  36. var $headers;
  37.  
  38. function __construct(){
  39. $this->libs_need = array('sql'); /* Need */
  40. }
  41.  
  42. function matrix_sql($query_sql){
  43. /* Reset value */
  44. $this->total_items = null;
  45. $this->total_pages = null;
  46. $this->actual_page = null;
  47. $this->actual_url = null;
  48. $this->matrix_content = null;
  49. $this->matrix_paginator = null;
  50. $this->last_error = null;
  51. $this->base_url = null;
  52.  
  53. /* Count results */
  54. $this->total_items = $this->sql->fast_select('select count(*) from '.substr($query_sql, strripos($query_sql, ' from ') + 6, strlen($query_sql) - (strripos($query_sql, ' from ') + 6)), true);
  55. $this->total_pages = ceil($this->total_items / (int)$this->items_by_page);
  56.  
  57. /* Clean get var */
  58. if((int)$_GET[$this->page_var] == 0)
  59. $this->actual_page = 1; /* Default page */
  60. elseif($_GET[$this->page_var] > (int)$this->total_pages)
  61. $this->actual_page = (int)$this->total_pages;
  62. else
  63. $this->actual_page = (int)$_GET[$this->page_var];
  64.  
  65. /* Make content */
  66. $this->matrix_content = $this->sql->fast_select($query_sql.' limit '.(((int)$this->actual_page - 1) * (int)$this->items_by_page).', '.(int)$this->items_by_page);
  67.  
  68. /* Configuration of paginator */
  69. if((int)$this->actual_page > ($this->pages_by_screen / 2)){
  70. $nstart_paginator = floor(((int)$this->actual_page + 1 - $this->pages_by_screen / 2));
  71. if($nstart_paginator < 1)
  72. $nstart_paginator = 1;
  73. $nlast_paginator = ($this->pages_by_screen + $nstart_paginator - 1);
  74. }else{
  75. $nstart_paginator = 1;
  76. $nlast_paginator = (int)$this->pages_by_screen;
  77. }
  78.  
  79. /* Make URL base */
  80. $this->base_url = $this->conf->script_url .'?';
  81. if($_GET){
  82. foreach($_GET as $var => $val){
  83. if($var != $this->page_var){
  84. if(is_array($val)){
  85. foreach($val as $a => $b){
  86. $this->base_url .= $var.'['.urlencode($a).']'.'='.urlencode($b).'&';
  87. unset($b);
  88. }
  89. unset($a);
  90. }else{
  91. $this->base_url .= urlencode($var).'='.urlencode($val).'&';
  92. }
  93. }
  94. unset($var, $val);
  95. }
  96. $this->base_url = substr($this->base_url, 0, strlen($this->base_url) - 1);
  97. }
  98.  
  99. /* Make paginator */
  100. for($c = $nstart_paginator; $c <= $nlast_paginator; $c++){
  101. if($c > (int)$this->total_pages)
  102. break;
  103. $this->matrix_paginator[] = array(
  104. 'id' => $c,
  105. 'url' => $this->path->make_permalink($this->base_url.'&'.$this->page_var .'='.(int)$c),
  106. );
  107. }
  108.  
  109. $this->actual_url = $this->base_url.'&'.$this->page_var .'='.(int)$this->actual_page;
  110. return array(
  111. 'matrix_paginator' => $this->matrix_paginator,
  112. 'matrix_content' => $this->matrix_content
  113. );
  114. }
  115.  
  116. function make_content_html($headers, $custom_css = false){
  117. if(!$this->matrix_content){
  118. $this->last_error = array('id' => 1, 'text' => 'No have content');
  119. return false;
  120. }
  121.  
  122. $return = '';
  123.  
  124. /* Include default css */
  125. if((!$custom_css) and (!$this->conf->css_paginator_content_inserted)){
  126. $return .= '<link href="'.$this->path->libs().'res_paginator/default_content.css" type="text/css" media="screen" rel="stylesheet" />';
  127. $this->conf->css_paginator_content_inserted = true;
  128. }
  129.  
  130. $return .= '
  131. <table class="__cpag_a" id="__pag_a" name="__pag_a">
  132. <thead class="__cpag_b">
  133. <tr class="__cpag_c">
  134. ';
  135. /* Calculate columns */
  136. $th = 0;
  137. foreach($this->matrix_content[0] as $var => $val){
  138. $th++;
  139. $return .= '
  140. <th class="__cpag_d __cpag_th_'.(int)$th.'">'.$this->str->toHtml($headers[$var]).'</th>
  141. ';
  142. unset($var, $val);
  143. }
  144. unset($th);
  145. $return .= '
  146. </tr>
  147. </thead>
  148. <tbody class="__cpag_e">
  149. ';
  150. foreach($this->matrix_content as $trid => $content){
  151. $return .= '
  152. <tr class="__cpag_f __cpag_tr_'.$trid.'" id="__cpag_id_'.$trid.'" name="__cpag_id_'.$trid.'">
  153. ';
  154. $tdid = 0;
  155. foreach($content as $col => $val){
  156. $tdid++;
  157. $return .= '
  158. <td class="__cpag_g __cpag_td_'.(int)$tdid.'" id="__cpag_id_'.$trid.'_'.$tdid.'" name="__cpag_id_'.$trid.'_'.$tdid.'">
  159. '.$this->str->toHtml($val).'
  160. </td>
  161. ';
  162. unset($col, $val);
  163. }
  164. unset($tdid);
  165. $return .= '
  166. </tr>
  167. ';
  168. unset($trid, $content);
  169. }
  170. $return .= '
  171. </tbody>
  172. </table>
  173. ';
  174.  
  175. return $return;
  176.  
  177. }
  178.  
  179. function make_paginator_html($custom_css = false){
  180. if(!$this->matrix_content){
  181. $this->last_error = array('id' => 1, 'text' => 'No have content');
  182. return false;
  183. }
  184.  
  185. $return = '';
  186.  
  187. /* Include default css */
  188. if((!$custom_css) and (!$this->conf->css_paginator_inserted)){
  189. $return .= '<link href="'.$this->path->libs().'res_paginator/default_paginator.css" type="text/css" media="screen" rel="stylesheet" />';
  190. $this->conf->css_paginator_inserted = true;
  191. }
  192.  
  193. $return .= '
  194. <table class="__pag_a" id="__pag_a" name="__pag_a">
  195. <tbody class="__pag_b">
  196. <tr class="_pag_c">
  197. <td class="__pag_d __pag_td_start">
  198. <a class="__pag_e __pag_href_start" href="'.$this->path->make_permalink($this->base_url .'&'.$this->page_var .'=1').'"><div class="__pag_f __pag_div_start">&lt;&lt;</div></a>
  199. </td>
  200. ';
  201. foreach($this->matrix_paginator as $id => $pag){
  202. $id = ($id + 1);
  203. if($this->actual_page == $pag['id']){
  204. $return .= '
  205. <td class="__pag_d __pag_td_'.$id.' __pag_td_actual">
  206. <a class="__pag_e __pag_href_'.$id.' __pag_href_actual" href="'.$pag['url'].'"><div class="__pag_f __pag_div_'.$id.' __pag_div_actual">'.$pag['id'].'</div></a>
  207. </td>
  208. ';
  209. }else{
  210. $return .= '
  211. <td class="__pag_d __pag_td_'.$id.'">
  212. <a class="__pag_e __pag_href_'.$id.'" href="'.$pag['url'].'"><div class="__pag_f __pag_div_'.$id.'">'.$pag['id'].'</div></a>
  213. </td>
  214. ';
  215. }
  216. unset($id, $pag);
  217. }
  218. $return .= '
  219. <td class="__pag_d __pag_td_end">
  220. <a class="__pag_e __pag_href_end" href="'.$this->path->make_permalink($this->base_url .'&'.$this->page_var .'='.$this->total_pages).'"><div class="__pag_f __pag_div_end">&gt;&gt;</div></a>
  221. </td>
  222. </tr>
  223. </tbody>
  224. </table>
  225. ';
  226. return $return;
  227. }
  228.  
  229. function make_all_html($headers, $custom_css = false){
  230. return ($paginator = $this->make_paginator_html($custom_css)).$this->make_content_html($headers, $custom_css).$paginator;
  231. }
  232. }
  233.  
  234.  
  235.  
  236.