Foros del Web » Programando para Internet » PHP »

Problema al mostrar función de Paginación

Estas en el tema de Problema al mostrar función de Paginación en el foro de PHP en Foros del Web. He decidido hacer una función PHP que sirva para paginación, con Url modificable. (No como la clase de JPinedo que es más complicado, y la ...
  #1 (permalink)  
Antiguo 15/02/2011, 18:54
Avatar de Miguelithox  
Fecha de Ingreso: diciembre-2008
Ubicación: Viña del Mar
Mensajes: 287
Antigüedad: 15 años, 4 meses
Puntos: 7
Pregunta Problema al mostrar función de Paginación

He decidido hacer una función PHP que sirva para paginación, con Url modificable. (No como la clase de JPinedo que es más complicado, y la Url no la puedes modificar a tu gusto)

Pero tengo un problema al mostrar los datos.

Aquí les dejo el código.

$consulta: Es la consulta a la base de datos.
$hasta: Es la cantidad de registros a mostrar por pagina.
$nombre: Es el nombre que se le dará en el array() en el while().
$while: Es el array, en el cual seleccionas las tablas que necesitarás luego en el foreach().
$foreach: Es donde muestras los resultados.
$url: Es la url en donde se encuentra la paginación, tu le indicas, para luego la paginacion agregar /pag/X/
Función Paginacion();
Código PHP:
Ver original
  1. function Paginacion($consulta, $hasta, $nombre, $while, $foreach, $url) {
  2.     global $config;
  3.  
  4. $hasta  =   $hasta;
  5. $pagina =   (int) $_REQUEST['pagina'];
  6. if($pagina < 1 || empty($pagina)) {
  7. $pagina = 1;
  8. }
  9. if(!empty($pagina)) {
  10. $desde  =   ($pagina - 1) * $hasta;
  11. $act    =   $pagina;
  12. } else {
  13. $desde  =   0;
  14. $act    =   1;
  15. }
  16.  
  17. $sql        =   $consulta;
  18. $request    =   Consulta($sql . " LIMIT {$desde}, {$hasta}", __FILE__, __LINE__);
  19. $rows       =   mysql_num_rows(Consulta($sql, __FILE__, __LINE__));
  20. $config[$nombre]    =   array();
  21. while($row  =   mysql_fetch_assoc($request)) {
  22. $config[$nombre][]  =   $while;
  23. }
  24.  
  25.  
  26. if($rows == false) {
  27. echo 'Nada';
  28. } else {
  29. foreach($config[$nombre] as $mostrar) {
  30. echo $foreach;
  31. }
  32.  
  33. $ant        =   $act - 1;
  34. $sig        =   $act + 1;
  35. $ult        =   $rows / $hasta;
  36. $res        =   $rows % $hasta;
  37. if($res > 0) {
  38. $ult        =   floor($ult) + 1;
  39. }
  40. if($ult > 1) {
  41. echo '<div class="OuterBox">
  42. <div class="InnerBox">
  43. <div class="wp-pagenavi">
  44. <span class="pages">P&aacute;gina ' . $act . ' de ' . $ult . '</span>';
  45. if($ult == $act && $act <> 1) {
  46. echo '<a href="' . $url . '/pag/1/" class="page" title="&laquo; Primera">&laquo; Primera</a>';
  47. }
  48. if($act > 1 && $ant <> 1) {
  49. echo '<a href="' . $url . '/pag/' . $ant . '/" class="page" title="' . $ant . '">' . $ant . '</a>';
  50. }
  51. echo '<span class="current">' . $act . '</span>';
  52. if($act < $ult && $sig <> $ult) {
  53. echo '<a href="' . $url . '/pag/' . $sig . '/" class="page" title="' . $sig . '">' . $sig . '</a>';
  54. }
  55.  
  56. if($ult - $act >= 4) {
  57. for($i = $sig + 1; $i <= $ult - 1; $i++) {
  58. echo '<a href="' . $url . '/pag/' . $i . '/" class="page" title="' . $i . '">' . $i . '</a>';
  59. }
  60. }
  61.  
  62. if($ult <> $act) {
  63. echo '<a href="' . $url . '/pag/' . $ult . '/" class="last" title="&Uacute;ltima &raquo;">&Uacute;ltima &raquo;</a>';
  64. }
  65. echo '</div>
  66. </div>
  67. </div>';
  68. }
  69. }
  70. }



y aquí lo llamo:
Código PHP:
Ver original
  1. $hasta      =   10;
  2. $consulta   =   "SELECT * FROM (articulos AS a, articulos_comentarios AS c) WHERE a.ID_ARTICULO = c.ID_ARTICULO";
  3. $nombre     =   'comentarios';
  4. $while      =   array(
  5.     'id'    =>  $row['ID_COMENTARIO'],
  6.     'fec'   =>  Fecha($row['fecha']),
  7.     'com'   =>  BBcode($row['comentario'])
  8. );
  9.  
  10. $foreach    =   '<div>En el comentario n&uacute;mero ' . $mostrar['id'] . ', con fecha ' . $mostrar['fec'] . ' se dijo: <br />' . $mostrar['com'] . '</div>';
  11.  
  12.  
  13. $url        =   $config['url'] . '/probando';
  14. Paginacion($consulta, $hasta, $nombre, $while, $foreach, $url);

El problema que tengo, es que los cuenta perfectamente los resultados, con las páginas y todo, pero no me muestra ni la ID, ni la fecha, ni el comentario, ni ningún dato.

¿Qué es lo que me falta para que funcione?

Saludos.
  #2 (permalink)  
Antiguo 15/02/2011, 23:54
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema al mostrar función de Paginación

El problema que tienes es que tu variable $while no hace reemplazos automaticamente, entonces, lo que necesitas es crear una especie de plantilla, por ejemplo:

Código PHP:
Ver original
  1. $while = '<div class="clase_de_comentarios">Comentario Número: [ID_COMENTARIO] publicado el: [fecha], se dijo:<br />[comentario]</div>';
  2.  
  3. // Y en tu clase, al leer cada registro de la consulta:
  4. while($row.... ) {
  5.     // Inicializas la variable para este ciclo
  6.     $salida = $while;
  7.     // Recorres todos los campos para hacer el reemplazo
  8.     foreach($row as $campo => $valor) {
  9.         // Reemplazas las pseudo-etiquetas con el valor correspondiente de cada campo
  10.         $salida = str_replace("[$campo]", $valor, $salida);
  11.     }
  12.     // Finalmente, muestras el contenido de este registro
  13.     echo $salida;
  14. }

Solo hay dos cosas a tener en cuenta:
1- Cada pseudo-etiqueta debe ser el nombre del campo, como lo defines en la tabla
2- Con esta opcion no puedes convertir la fecha, debes pensar que hacer para que se ejecute la funcion... eso te queda de tarea
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 16/02/2011, 00:23
Avatar de Miguelithox  
Fecha de Ingreso: diciembre-2008
Ubicación: Viña del Mar
Mensajes: 287
Antigüedad: 15 años, 4 meses
Puntos: 7
Respuesta: Problema al mostrar función de Paginación

¡Se agradece bastante tu ayuda!.

Lo único que no puedo hacer es pasarle las funciones, he probado de todo, alguna pista en la cual puedas ayudarme para pasarle funciones a los campos? :D
  #4 (permalink)  
Antiguo 16/02/2011, 18:13
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema al mostrar función de Paginación

Tal vez lo mas facil seria crear otro arreglo, este es demasiado sencillo, porque estamos considerando enviar solamente un parametro:

Código PHP:
Ver original
  1. $funciones = array('nombre_de_campo' => 'nombre_funcion');
  2.  
  3. // En tu clase, debes recibir tambien $funciones y, dentro del foreach():
  4. if(isset($funciones[$campo])) {
  5.     $valor = $funciones[$campo]($valor);
  6. }
  7.  
  8. // Una vez ejecutada la funcion, haces el reemplazo normal con str_replace

Solo por si te quedo la duda:
Código PHP:
Ver original
  1. function fecha($fecha) {
  2.     return date('d-m-Y', $fecha);
  3. }
  4.  
  5. // Esto
  6. $funcion = 'fecha';
  7. echo $funcion(time());
  8.  
  9. // Funciona igual que esto:
  10. echo fecha(time());
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 16/02/2011, 19:04
Avatar de Miguelithox  
Fecha de Ingreso: diciembre-2008
Ubicación: Viña del Mar
Mensajes: 287
Antigüedad: 15 años, 4 meses
Puntos: 7
Respuesta: Problema al mostrar función de Paginación

¡Se agradece! Me ayudó bastante para organizarme en el código. Tengo otra duda (espero no molestarte mucho). Lo que quiero hacer es por ejemplo hacer un conteo de comentarios que tenga cada artículo (Obviamente hago la paginación de los artículos con la función Paginación), pero como hago para contar los comentarios de cada artículo, seleccionando la ID del artículo en cada comentario? He intentado, pero nuevamente no puedo hacer que funcione. Saludos y gracias de antemano.
  #6 (permalink)  
Antiguo 17/02/2011, 13:28
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema al mostrar función de Paginación

Eso es facil con una simple consulta:

SELECT COUNT(*) FROM tabla WHERE filtro
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: Ninguno
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 21:11.