Foros del Web » Programando para Internet » PHP »

dividir un texto o una lista

Estas en el tema de dividir un texto o una lista en el foro de PHP en Foros del Web. Tengo una tabla de x tamaño, y dentro cargo lista generadas de una base de datos o textos planos de un archivo, se visualizan sin ...
  #1 (permalink)  
Antiguo 07/05/2006, 13:44
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
dividir un texto o una lista

Tengo una tabla de x tamaño, y dentro cargo lista generadas de una base de datos o textos planos de un archivo, se visualizan sin ningún problema, pero si la lista generada o el texto ocupa mas que tabla, se sale de las dimensiones de la tabla y queda superpuesto por encima de lo que halla, me gustaría saber si hay alguna manera mediante php de que cuando se genere esa lista o muestre el texto, si no cabe en la tabla, que lo divida en dos, tres... partes, las que sean necesarias y mediante un link que ponga por ejemplo siguiente, muestre el resto, por ejemplo, tengo una lista del 1 al 500, que no cabe en la tabla, pero cabe del 1 al 30, pues que divida la lista en grupos de 30 y ponga enlace o enlaces, para ir accediendo al resto de la lista o si un texto que ocupa 400 lineas, y en la tabla solo caben 50 lineas, que divida el texto en grupos de 50 lineas y con un enlace tipo siguiente, quiero que sea dinámico, nada de que me divida físicamente el fichero en partes o me cree dos bases de datos de una, espero haberme explicado, haber si alguien me puede echar una mano, gracias

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #2 (permalink)  
Antiguo 08/05/2006, 06:34
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Podrías probar:

Wordwrap()
www.php.net/wordwrap

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 08/05/2006, 13:37
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
eso esta muy bien, pero como recupero los trozos que genera??

Algo como esto????
Código PHP:
$texto "El veloz murcielago hindo comia feliz cardillo y kiwi.";
$nuevo_texto wordwrap($texto20"<br />\n");

$row1 mysql_fetch_row($nuevo_texto) <--- Asi

$row2 
mysql_fetch_array($nuevo_texto) <---- o asi

echo $row1[1];
echo 
$row1[2]; 
bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #4 (permalink)  
Antiguo 08/05/2006, 13:42
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
No te regresa un array por asi decirlo, te regresa un string - o una cadena -,el cual podrias manipularlo con la funcion explode()
  #5 (permalink)  
Antiguo 08/05/2006, 14:15
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
mauled, lo que hace es meter en un array cada palabra:

Código PHP:
$texto "El veloz murcielago hindo comia feliz cardillo y kiwi.";
$nuevo_texto wordwrap($texto20"<br />\n");

$row explode(" "$nuevo_texto);

echo 
$row[0]." ".$row[1]." ".$row[2]." ".$row[3]." ".$row[4]." ".$row[5]." ".$row[6]." ".$row[7]." ".$row[8]; 
Devuelve:

El veloz murcielago hindo comia feliz cardillo y kiwi.

El problema, es que yo no se lo que ocupan el texto o la lista y mucho menos como formatearlo con <br /> <p><p />, porque cada texto es diferente

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #6 (permalink)  
Antiguo 08/05/2006, 15:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No entendí bien que pretendes hacer .. pero aplicar "wordwrap()" se trata de que lo uses -sólo- cuando accedas a tu dato y lo tengas que mostrar NO cuando lo almacenes en tus BBDD. Almacena el dato en tus BBDD tal cual lo tienes (esas cadenas largas) .. Sólo cuando lo muestres en tus tablas que es donde te desordena todo .. ahí aplicas el "wordwrap()".


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 08/05/2006, 15:38
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Cluster, pues justamente eso, el texto se ha de mostrar en una sola tabla, si no cabe quiero dividirlo en partes y mostrarlo como páginas, pero esas partes tienen que estar guardas, en variables, para poder mostrarlas por partes, como si fuese un libro

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #8 (permalink)  
Antiguo 08/05/2006, 17:05
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Haber, yo tengo una página como esta:


Código:
<html>
<style>
.borde {

	border-style: outset;
	border-right: 2px solid black;
	border-top: 2px solid black;
	border-left: 2px solid black;
	border-bottom: 2px solid black;
	
 	}
</style>
<body>

<table style="width:500px">
<tr><td class="borde">
<div style="margin: 10px; height: 100px; padding: 10px;">
Código PHP:
<?php include "pruebainclude.php" ?>
</div> </td></tr> </table> </body> </html>
http://www.bichomen.com/prueba.php

Como se puede apreciar el texto se sale de la tabla, aqui lo echo de una forma sencilla con un include que llama a una página donde esta metido el texto a palo seco, en donde lo quiero aplicar, el include es una página que accede a una base de datos, muestra una lista de articulos tu picas en uno y la misma pagina carga el articulo, que se encuentra indexado en la base de datos y guardado fisicamente en un archivo de texto.

Hasta aqui todo correcto, el problema viene cuando la lista de articulos es muy larga o el articulo y no cabe en la tabla, pues siguiendo el ejemplo que e puesto quiero que muestre las 4 primeras filas y ponga un link para cargar las 4 siguientes, asi hasta el final del texto .

Con wordwrap(), si me divide el texto en partes, pero no se como acceder a cada parte, lo que hace es mostrarme de golpe todas y con explode(), si puedo extraer las partes, pero como no todos los archivos son del mismo tamaño, no se puede generar de forma automatica, osea cuando uso la funcion explode() si me guarse en una variable las parte en que divide el texto podria crear una funcion que crease tantos enlaces, como partes tiene el texto, igualmente por lo que veo explode() almacena por palabras y no por caracteres o grupo de caracteres.

Espero haberme explicado mejor ahora

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #9 (permalink)  
Antiguo 09/05/2006, 17:11
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Bueno, e echo algunos adelantos, modificando el ejemplo anterior:

Código:
<html>
<style>
.borde {

	border-style: outset;
	border-right: 2px solid black;
	border-top: 2px solid black;
	border-left: 2px solid black;
	border-bottom: 2px solid black;
	
 	}
</style>
<body>

<table style="width:500px">
<tr><td class="borde">
<div style="margin: 10px; height: 100px; padding: 10px;">
Código PHP:
<?php $saltos file("pruebainclude.txt"); $cuenta count($saltos); echo $cuenta; ?>
</div> </td></tr> </table> </body> </html>
Obtengo el numero de saltos de linea del archivo, en este caso, 116, ahora el caso, seria guardar en un array, por ejemplo cada 4 saltos de linea, me saldria 116/4 = 29 un array[28], como hago esto??

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #10 (permalink)  
Antiguo 09/05/2006, 17:53
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
<?php

/*
por lo que lei estas buscando una paginacion, asi q lo mejor seria esto
*/

$start = $_GET['start'];

$saltos = file("pruebainclude.txt");
$cuenta = count($saltos);
//echo $cuenta;

$cadena_de_4_lineas= $saltos [$start].$saltos [$start+1].$saltos [$start+2].$saltos [$start+3].

/*
hacemos el paginador
*/

for ($i = 0 ; $i < ceil($cuenta/4) ; $i++ ){

echo '<a href="pagina.php?start="'.$i*4.'>'.$i.'</a>';

}

?>

Suerte
  #11 (permalink)  
Antiguo 10/05/2006, 03:07
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
tu codigo me devuelve este error:

Código:
Parse error: parse error, unexpected T_FOR in
en la linea:

Código PHP:
for ($i $i ceil($cuenta/4) ; $i++ ){ 
bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #12 (permalink)  
Antiguo 10/05/2006, 03:21
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
ya arregle el problema:

cambie esta linea:
Código PHP:
echo '<a href="pagina.php?start="'.$i*4.'>'.$i.'</a>'
por esta otra:
Código PHP:
$valor $i*4;
echo 
'<a href="pagina.php?start="'.$valor.'>'.$i.'</a>'
bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #13 (permalink)  
Antiguo 21/05/2006, 15:32
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Despues de mucho mirar, y un tiempo dedicandome a otras cosas, e conseguido este hibrido de codigo:

Código PHP:
<?php

include "pruebainclude.php";

$saltos wordwrap($texto$cadena);

$row $_GET['row'];
$total $_GET['total'];

for (
$row$row <= $total $row++ )
{
    print (
$saltos[$row]);
}

print(
"<br />");

/*
hacemos el paginador
*/

$cadena strlen($texto);
$trozos $cadena 4500;
$trozo ceil($trozos);

$row 0;
$total4500;

for (
$row2 1$row2 <= $trozo$row2++ )
{

    print (
"<a href=\"prueba.php?total=".$total."&row=".$row."\">".$row2."</a>");    
    
$total $total 4501;
    
$row $row 4500;
    
}

?>

con el include meto un texto de unos, 45000 caracteres, hay es poco!!!, entonces los divido en trozos de 4500 carateres, que con el redondeo para arriba, me sale 11 trozos, osea e dividido el texto en 11 páginas, y funciona, salvo por un par de cositas, al principio, quería que de entrada me mostrase los 4500 primeros caracteres, y despues cuando le diese al link 2 los 4500 siguientes y así, pero no lo consigo, no me sale, probe con un do while, pero no se pq no funciona, despues de cambiar algunas cosas, me muestra los trozos bien sin seguir mostrandome de entrada los 4500 primeros, para verlos tengo que darle al link 1, pero es q ademas me muetra el primer caracter del texto.

Para que lo entendais, abro la página y me aparece esto:

Código:
A <--- primer caracter del texto

1234567891010 

y cuando le doy a 1, entonces aparece esto:
Código:
lkdflrkjogjhgjhghglkhjglkñhjglkjhlñgkjhglkñjlkñhjglkhjlhkjlgkñjhhhhhhhhhlgkñhjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjfgiiojklñ <--- Los primeros 4500 caracteres

1234567891010 
Haber si me podeis echar una mano, el enlace de la prueba: http://www.bichomen.com/prueba.php

bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #14 (permalink)  
Antiguo 23/05/2006, 12:45
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 877
Antigüedad: 20 años, 10 meses
Puntos: 2
Bueno al final solucione el problema, cuelgo el código por si le puede servir a alguien:

Código PHP:
<?php

include "pruebainclude.php";

$saltos wordwrap($texto$cadena);

if (
$total >= 4501)
{
    
$row $_GET['row'];
    
$total $_GET['total'];
}
else 
{
    
$row 0;
    
$total4500;
    for (
$row$row <= $total $row++ )
    {
        print (
$saltos[$row]);
    }
    print(
"<br />");
}

$cadena strlen($texto);
$trozos $cadena 4500;
$trozo ceil($trozos);

for (
$row$row <= $total $row++ )
{
    print (
$saltos[$row]);
}

print(
"<br />");

$row 0;
$total4500;

for (
$row2 1$row2 <= $trozo$row2++ )
{

    print (
"<a href=\"prueba.php?total=".$total."&row=".$row."\">".$row2."</a>");    
    
$total $total 4501;
    
$row $row 4500;
    
}

?>
bichomen
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
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 13:11.