Foros del Web » Programando para Internet » PHP »

Paginar el contenido de un registro de la bd (mysql).

Estas en el tema de Paginar el contenido de un registro de la bd (mysql). en el foro de PHP en Foros del Web. Hola a todos, mi pregunta no es como paginar un array de los registros de una tabla, sino paginar el contenido de un solo campo, ...
  #1 (permalink)  
Antiguo 22/08/2011, 11:20
 
Fecha de Ingreso: febrero-2011
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
Paginar el contenido de un registro de la bd (mysql).

Hola a todos, mi pregunta no es como paginar un array de los registros de una tabla, sino paginar el contenido de un solo campo, en función del tamaño de su contenido, aparezcan más o menos páginas que lo dividan.

Es decir, tengo en la base de datos una tabla llamada relatos, y dicha tabla la forman los campos id, titulo, autor, relato y fecha.

Supongamos que el campo "relato" contiene un texto de unos 3000 caracteres, y quiero que haya un máximo de 1000 caracteres por página.

¿Hay alguna manera de configurar un paginador para que haga esta función?, si hay 5000 caracteres, que muestre 5 páginas, 10000, 10, y así con cada registro de la tabla relatos que se muestre.

Tampoco estaría mal que haga el corte en un punto y aparte, pudiendo cortar el texto antes de los 1000 caracteres o después.

No se si me he explicado bien, pero no sé por donde empezar a hacer ésto, pues realmente desconozco que con php se pueda hacer algo así.

Si por el contrario, se puede hacer con javascript o algún otro lenguaje, no os cortéis, aunque lo haya enfocado a php, también me valen otros lenguajes de programación.

Un saludo y gracias.
  #2 (permalink)  
Antiguo 22/08/2011, 13:45
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 9 años, 1 mes
Puntos: 61
Respuesta: Paginar el contenido de un registro de la bd (mysql).

meister256 ,

podrias echarle un vistazo a este link http://www.forosdelweb.com/f18/pagin...elease-532119/ de la seccionde aportes .

saludos
  #3 (permalink)  
Antiguo 22/08/2011, 17:07
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 11 años, 7 meses
Puntos: 416
Respuesta: Paginar el contenido de un registro de la bd (mysql).

Cita:
No se si me he explicado bien, pero no sé por donde empezar a hacer ésto, pues realmente desconozco que con php se pueda hacer algo así.
Se puede, pero desconozco que exista un script prehecho para esta tarea.

La idea seria, cortar los primeros 1000 caracteres del texto. El texto restante, busco la 1era aparición del punto y aparte y guardo la posición en la que se encuentra + 1000 (porque le cortaste 1000 caracteres al principio) y luego obtienes desde el principio hasta donde apareció el punto y aparte.

Esto lo logras con substr(), stripos(), un bucle y unas cuantas $banderillas. No es complicado (en lo absoluto), pero definitivamente consumiría tiempo.
  #4 (permalink)  
Antiguo 23/08/2011, 11:08
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Paginar el contenido de un registro de la bd (mysql).

Considero que la mejor forma de hacer ésto, no es cortar automáticamente cada 1000 caracteres, o por párrafos, ya que puedes tener una página con un párrafo enorme, la cual será muy grande, y otra con un párrafo relativamente pequeño, que apenas llegue a los 1000 caracteres. En fin, no creo que sea bueno que dejes que el sistema corte por donde a él le parezca.

Así como tampoco veo bien crear en la tabla "relatos" de la bd más campos para asignarlos a cada página, lo cual sería demasiado manual y limitaría a un número de páginas en concreto, por no decir que sigue siendo algo manual el tener que dividir el texto entre varios cuadros de texto antes de enviarlo.

En definitiva, la opción de agregar etiquetas que determinen donde termina la página y empieza otra, me parece la más adecuada, y el trabajo que da a la hora de escribir cada texto, no es demasiado grande y te asegura que todos los artículos queden bien estructurados y divididos de la forma más adecuada.

Por ahí circula algún código que divida en función de las etiquetas que encuentre en el texto, algo así podría servirte:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $id=$_GET["id"];
  4. include('conexion.php');
  5.  
  6. $consultarelatos=mysql_query("select * from relatos where id='$id'",$connect);
  7. $relato = mysql_fetch_array($consultarelatos);
  8.  
  9. $txt = nl2br($relato['relato']);
  10.  
  11.  
  12. $busca = split("{nuevapagina}",$txt); // Buscamos nuestra etiqueta personalizada en el texto y convertimos en un array.
  13. $paginas = count($busca);
  14. $total_trozos = count($busca)-1; // Contamos los trozos generados y le restamos 1 para hacerlo compatible con el array.
  15.  
  16. if($_GET['p']<=$total_trozos){ // Condicionamos a que el script se ejecute solo si la varible $_GET['p'] es menor o igual que los trozos.
  17.  
  18. if(!$_GET['p'] || $_GET['p']==0){ // Si $_GET['p'] esta vacio o es igual a 0 mostramos el primer trozo.
  19.     echo $busca[0];
  20. }else{                            // Si no cumple lo anterior comienza a mostrar los siguientes trozos.
  21.     echo $busca[$_GET['p']];
  22. }
  23.  
  24. echo "";  // Saltos de linea.
  25.  
  26. if($_GET['p']>=1){  // Si $_GET['p'] es mayor o igual que 1 muestra el enlace de anterior.
  27.     $s = $_GET['p']-1;  // Restamos 1 a $_GET['p'] para ir al trozo anterior.
  28.     echo "<a href=?p=$s>Anterior</a> ";
  29. }
  30.  
  31. for($i=0;$i<$paginas;$i++){
  32.     echo "<a href=?p=".$i."> |" . $i ."|</a>";
  33. }
  34.  
  35. if($_GET['p']<$total_trozos){  // Si $_GET['p'] es menor que los trozos totales muestra enlace de siguiente.
  36.     $s = $_GET['p']+1;         // Sumamos 1 a $_GET['p'] para ir al trozo siguiente.
  37.     echo "<a href=?p=".$s.">Siguiente</a>";
  38. }
  39.  
  40. }else{  // Si $_GET['p'] es mayor que los trozos  mostramos mensaje de error.
  41. echo "Error";
  42. }
  43. ?>

De esta forma, accedes con la id de cada relato (ej: relato.php?id=3) y te mostrará el relato con las páginas que tenga, divididas por la etiqueta {nuevapagina}.

A ver que te parece.

Un saludo
  #5 (permalink)  
Antiguo 23/08/2011, 12:18
 
Fecha de Ingreso: febrero-2011
Mensajes: 9
Antigüedad: 9 años
Puntos: 0
Respuesta: Paginar el contenido de un registro de la bd (mysql).

Muchas gracias Male, me ha servido de mucho.

Ahora tengo un problema, me salen los botones de anterior y siguiente, y todas las páginas numeradas también.

Pero, aquí viene mi problema, ¿Cómo puedo hacer para que el link que enlace a la página en la que estás tenga otro estilo distinto?

He probado con ésto:

Código PHP:
Ver original
  1. <?php
  2.  
  3.  for($i=0;$i<$paginas;$i++){
  4.  
  5. if ($id==$i) {
  6.     echo "<a class='selected' href=?id=".$id."&p=".$i."><!-- --></a>";
  7. } else {
  8.     echo "<a href=?id=".$id."&p=".$i."><!-- --></a>";  
  9.     }  
  10. }
  11. ?>

Ese código hace que por ejemplo en un texto de 3 páginas, la segunda, se ponga con el estilo css distinto, pero siempre es así, esté en la página que esté, siempre marca la 2º página como la distinta...

¿Por qué puede ser?

Un saludo y muchas gracias.
  #6 (permalink)  
Antiguo 23/08/2011, 13:21
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Paginar el contenido de un registro de la bd (mysql).

Buenas meister, me alegro de que te sirviese.

Lo cierto es que ahí me has pillado, no se como podrías diferenciar la página en la que estás, ya que no se trata de un array de páginas y tengas que hacer una simple comparación entre la id del get y la id de cada página mostrada, sino que parece hacerse de otra forma... la cual desconozco.
  #7 (permalink)  
Antiguo 23/08/2011, 14:56
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 13 años, 10 meses
Puntos: 11
Respuesta: Paginar el contenido de un registro de la bd (mysql).

Ya tengo la solución... es realmente obvia, pero lo mismo que me ha pasado a mi, comprendo que te pueda pasar a ti o a cualquiera ^^, resulta que estás usando el valor de la id para compararlo, no el valor de la página actual y el de la página que pasa el get ^^.

Debes generar una variable que muestre el valor de la página pasado por get:
Código PHP:

<?php

$p
=$_GET["p"]; //por ejemplo

?>
Después si que tienes lo necesario para operar.

Código PHP:

<?php

if ($p==$i) {
    echo 
"<a class='selected' href=?id=".$id."&p=".$i."><!-- --></a>";
} else {
    echo 
"<a href=?id=".$id."&p=".$i."><!-- --></a>";    
    }    
}

?>
Eso si el resto lo estás haciendo bien, tiene que funcionarte si o si, lo acabo de comprobar.

Un saludo

Etiquetas: bd, contenido, paginar, registro, tabla
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 23:34.