Ver Mensaje Individual
  #4 (permalink)  
Antiguo 23/08/2011, 10:08
Malekith
 
Fecha de Ingreso: abril-2006
Mensajes: 105
Antigüedad: 18 años
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