|
|
·
Skindario
Buscar en el Foro Buscar Tags
Portal
Foro
Usuario
Foro
Normas
RSS
Etiquetas
Avatares
Rangos
Eventos
Staff
Entrevistas
Noticias
Caretos
F.A.Q
Subforos Privados
Estadisticas
Estadisticas
Usuarios
OnLine
Actividad
Funciones
Favoritos
P. Inicio
Imprimir
Buscar
Afiliados
¿Tu Web Aquí?
Comunidad ESDLA
Foros DWP
Websmasters Foro
Mundo Deluxe
Photosherox
Descargas-V
Enlázanos

i
bbcode
 
Portal · Foros · Zona Webmasters · PHP
Noticias · Buscar · Tags · Imágenes · Usuarios · Fisgona
Ir a la página: 1 · 2 · última
29 mensajes. Página 1 de 2
Autor Mensaje 
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#1 ·
bbcode

¿Cómo se puede hacer para poner un bbcode, como el de estos foros, pero manualmente?

Lo que yo tengo es un formularios que es procesado por un archivo php, que guarda los datos en una base de datos.
Despues esos datos se piden en otros archivos para mostrarlos.

Buscando en internet encontré una función, pero no se como debo hacerlo para que procese el campo mensaje.

¿Podrían explicarme como funciona el bbcode?

Un saludo

31/Ago/2006 19:40 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#2 ·
RE: bbcode

Es bastante sencillo. Solo necesitas una funcion que la vas a repetir bastantes veces.

Imagina que tu variable que tiene el texto es $texto.


La funcion es asi:

$texto = eregi_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $texto);

Te he marcado la eqtiqueta en negrita. Como ves los corchetes van capados (con esta barra delante \).

El texto que he subrayado es lo que reemplazara a lo que haya entre las dos etiquetas.

Despues, en las segundas comillas has de poner por lo que se reemplaza. La variable 1 es lo que estaba subrayado antes, es decir, lo que esta entre las etiquetas.


-----


Te pongo otro ejemplo, esta vez con 2 "incognitas": por ejemplo las url.


$texto = eregi_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $texto);


Ahi utiliza 2 veces ([^\[]*) . Cuando se usa eso es porque sera un texto que no sabemos cual es, eso nunca lo reemplaza. Lo guarda en variables.

Luego si te fijas en donde reemplazamos tenemos puesto 1 y 2. El 1 es el primer ([^\[]*) y el 2 el segundo.

-------



La funcion es esa, luego has de repetirla tantas veces como tags tengas para mostrar. Con eso puedes crear todo tipo de bbcodes que se te ocurran. Solo defines el tag, defines el codigo html y la parte que ha de "respetar" sin editar.






No se si me he explicado muy bien... es cuestion de entender la funcion. Si tienes dudas, pregunta

31/Ago/2006 20:05 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#3 ·
RE: bbcode

Bien la explicación la comprendo.

¿La función quedaría así, suponiendo que la variable a la que se le da fomatos es $mensaje? :

Codigo
&nbsp;function bbcode ($mensaje) {

$mensaje = eregi_replace("\[b\]([^\[]*)\[/b\]","&lt;b&gt;1&lt;/b&gt;", $mensaje);
$mensaje = eregi_replace("\[i\]([^\[]*)\[/i\]","&lt;i&gt;1&lt;/i&gt;", $mensaje);
$mensaje = eregi_replace("\[u\]([^\[]*)\[/u\]","&lt;u&gt;1&lt;/u&gt;", $mensaje);
$mensaje = eregi_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "&lt;a target='_blank' href='\1'&gt;\2&lt;/a&gt;", $mensaje);

}
Si es así, ¿donde habría que colocarlo? ¿en alrchivo que porcesa el formulario?
 

31/Ago/2006 20:24 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#4 ·
RE: bbcode

Pensando que el lugar de &lt; es < y en lugar de &gt; es >, si. Supongo que habra sido el editor de miarroba el que ha hecho ese cambio.


No, cuando lo envias en el formulario se ha de enviar sin modificar. Ya que si luego tu lo editas, te saldrian los codigos html en lugar del bbcode y tu no quieres que pase eso. En la base de datos lo has de meter directamente, guardado como [tag]texto[/tag]


Lo has de poner en el fichero que carga ese texto de la base de datos y lo "imprime" (lo muestra).

31/Ago/2006 20:31 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#5 ·
RE: bbcode

El archivo que muestra el mensaje queda así:

[php]

<p><?php

function bbcode ($mensaje) {

$mensaje = eregi_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $mensaje);
$mensaje = eregi_replace("\[i\]([^\[]*)\[/i\]","<i>1</i>", $mensaje);
$mensaje = eregi_replace("\[u\]([^\[]*)\[/u\]","<u>1</u>", $mensaje);
$mensaje = eregi_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $mensaje);
return $mensaje;
}

print $mensaje;


?></p>
 [/php]

y me lanza este error:

Cannot redeclare bbcode() in /home2/ebsmund/public_html/foro/mensaje.php on line 3

31/Ago/2006 20:44 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#6 ·
RE: bbcode

Creo que es porque ya tienes una funcion bbcode, aunque no puedo estar seguro.

Ah, y tal y como tienes el codigo, no te va a cambiar nada. Tendrias que hacer:

$mensaje = bbcode($mensaje);
print $mensaje;


Ademas, deberia haber una variable definida antes que fuera tambien $mensaje y que tuviera el texto a reemplazar.

31/Ago/2006 21:07 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#7 ·
RE: bbcode

No tengo otra función igual, además le he cambiado el nombre y me ha salido el mismo error.

y haciendo esto:

<p><?php

$mensaje = $mensaje;

function bbcode ($mensaje) {

$mensaje = str_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $mensaje);
$mensaje = str_replace("\[i\]([^\[]*)\[/i\]","<i>1</i>", $mensaje);
$mensaje= str_replace("\[u\]([^\[]*)\[/u\]","<u>1</u>", $mensaje);
$mensaje= str_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $mensaje);

}

$mensaje = bbcode ($mensaje);
print $mensaje;

?></p>

Tampoco me dejaba, ¿es eso lo que hay que hacer cuando me has dicho de crear la variable que recoja el mensaje de la base de datos?



31/Ago/2006 21:28 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#8 ·
RE: bbcode

¿¿lo de str_replace era por probar, se puede utilizar, o solo eregi_replace??

31/Ago/2006 21:33 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#9 ·
RE: bbcode

Haz una prueba. Crea un fichero nuevo. Sin mas codigo que este:

<?php


$mensaje = "[b]Negrita[/b] - [i]Cursiva[/i] - [u]Subrayado[/u]";


function bbcode($texto) {
$texto= str_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $texto);
$texto= str_replace("\[i\]([^\[]*)\[/i\]","<i>1</i>", $texto);
$texto= str_replace("\[u\]([^\[]*)\[/u\]","<u>1</u>", $texto);
$texto= str_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $texto);

return $texto;

}

$mensaje = bbcode ($mensaje);
print $mensaje;

?>





Y ya me dices lo que te sale



Editado por EffectedCard, Jueves, 31 de Agosto de 2006, 21:35
31/Ago/2006 21:34 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#10 ·
RE: bbcode

tal y como me lo has dado ,  me salían las etiquetas.
He modificado abajo el $mensaje = bbcode ($texto); pero entonces no me salía nada.

31/Ago/2006 21:43 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#11 ·
RE: bbcode

No, estaba bien como te lo he puesto yo. Aunque tiene un error, no es str_replace es: eregi_replace, cambialo y solucionado.




Tienes un pequeño lio con las variables:

Si tu pones function bbcode($variable). $variable SOLO tendra un valor para dentro de esa funcion. Es decir que si yo luego pongo print $variable, no saldra nada. Lo que hace es igualar $variable a lo que yo le doy como valor. P. ejmplo si pongo function bbcode($mensaje), $variable = $mensaje; si pusiera function bbcode('hola'), $variable = 'hola'. Por ello, si tu pones $mensaje = bbcode($texto); $texto no esta definido y por ello no te sale nada.


Por otra parte si tu haces $variable = bbcode($mensaje); lo que hace es que $variable toma el valor de $mensaje despues de haber reemplazado el bbcode, si es que tiene.


Y, antes has puesto: $mensaje = $mensaje; Si $mensaje no estaba definido, $mensaje no puede tener nignun valor! Tienes que darselo tu. Por ejemplo: $mensaje = "Texto";



Haz lo que te he dicho en la primera frase y te funcionara, el resto ha sido una pequeña explicacion (que no me ha quedado muy clara) para intentar corregir un par de errores que te he visto.

31/Ago/2006 21:55 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#12 ·
RE: bbcode

ok, tal y como tu has dicho ha funcionado, ahora se me plantea la siguiente pregunta.

Esto funciona:

$mensaje = "[b]Negrita[/b] - [i]Cursiva[/i] - [u]Subrayado[/u]";


function bbcode($texto) {
$texto= eregi_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $texto);
$texto= eregi_replace("\[i\]([^\[]*)\[/i\]","<i>1</i>", $texto);
$texto= eregi_replace("\[u\]([^\[]*)\[/u\]","<u>1</u>", $texto);
$texto= eregi_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $texto);

return $texto;

}

$mensaje = bbcode ($mensaje);
print $mensaje;

entonces, en vez de: "[b]Negrita[/b] - [i]Cursiva[/i] - [u]Subrayado[/u]" tengo que poner la variable que contiene el mensaje en la base de datos, que es $mensaje, por lo que tengo que cambiar los otros $mensaje por otro nombre de variable como por ejemlo $post, no?

porque no puedo poner al principio $mensaje = $mensaje;
sino: $post = $mensaje;

¿o estoy equivocado?

31/Ago/2006 22:21 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#13 ·
RE: bbcode

No hace falta. Con que cambies "Negrita - Cursiva - Subrayado" por la consulta a la base de datos (exactamente por el campo de la tabla que hayas de reemplazar) sobra.

31/Ago/2006 22:45 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#14 ·
RE: bbcode

Te comento,

esto en prueba.php funciona,

<?php

$post = "[b]Negrita[/b] - [i]Cursiva[/i] - [u]Subrayado[/u]";


function bbcode($texto) {
$texto= eregi_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $texto);
$texto= eregi_replace("\[i\]([^\[]*)\[/i\]","<i>1</i>", $texto);
$texto= eregi_replace("\[u\]([^\[]*)\[/u\]","<u>1</u>", $texto);
$texto= eregi_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $texto);

return $texto;

}

$post = bbcode ($post);
print $post;

?>

Ahora dices que hay cambiar "Negrita - Cursiva - Subrayado" por el campo de la tabla que es $mensaje, ¿lo pongo entre comillas o no?

Aunque la verdad da igual porque me sale el siguiente error a partir del segundo mensaje de un tema:

Fatal error: Cannot redeclare bbcode() in /home2/ebsmund/public_html/foro/mensaje.php on line 6

31/Ago/2006 23:00 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#15 ·
RE: bbcode

No tiene porque ser $mensaje el dato que tu sacas de la base de datos lo habras de definir tu. Habras de hacer la conexion a la base de datos, elegir la tabla y elegir el campo. Eso lo has de guardar una variable, pongamosle $ctext

Luego, habras de hacer: $variable = bbcode($ctext); print $variable;

o, directamente: print bbcode($ctext);





Ponme el codigo entero de la pagina donde lo pones y lo miro

31/Ago/2006 23:12 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#16 ·
RE: bbcode

ok, mira:

primero está foro.php donde está la conexion y las consultas:

include('cabecera.php');

/* Se introduce el titulo */
include('titulo.php');

?>

<div align="center">
<table class="table" cellspacing="0" cellpadding="0">
<tr>
<td class="menuizq" valign="top"><?php

/* Se introduce el menu de la izquierda */
include('menu_izq.php');

?></td>
</div>
</td>
<td class="contenido" align="center" valign="top"><table class="contenedor" cellspacing="0" cellpadding="0">
<tr>
<td valign="top" align="left">
<p><a href="../index.php?seccion=informacion_foro"><img border="0" src="imagenes/informacion.gif" width="75" height="15"></a></p>

<?php
require('configuracion.php');
require('funciones.php');
$id = $_GET["id"];
if(empty($id)) Header("Location: index.php");

$sql = "SELECT id, autor, titulo, mensaje, ";
$sql.= "DATE_FORMAT(fecha, '%d/%m/%Y') as fecha FROM foro ";
$sql.= "WHERE id='$id' OR identificador='$id' ORDER BY fecha ASC";
$rs = mysql_query($sql, $con);

include('header.php');

if(mysql_num_rows($rs)>0)
{
include('titulos_post.php');
$template = implode("", file('post.php'));
while($row = mysql_fetch_assoc($rs))
{
$color=($color==""?"#F3F0F0":"F3F0F0");
$row["color"] = $color;
//manipulamos el mensaje
$row["mensaje"] = nl2br($row["mensaje"]);
$row["mensaje"] = parsearTags($row["mensaje"]);
mostrarTemplate($template, $row);
}
}
include ('footer.php');
?>

</td>
</tr>
<tr><td><p class"contador">&nbsp;</p></td></tr>
</table></td>
<td class="menuder" valign="top"><?php

/* Se introduce el menu de la derecha */
include('menu_der.php');

?></td>
</tr>
</table>
</div>

<?php

/* Se introduce el pie */
include('pie.php');

?>



Luego esta post.php que como ces antes esta incluido:



<table width="400" align='center' cellpadding='1' cellspacing='1' class="foropost">

<tr bgcolor="<?=$color?>">
<td width="100" valign="top"><p><a name="<?=$id?>"></a><b><?=$autor?></b><br>
<font size="-2">Enviado el: <?=$fecha?></p></font></td>
<td width="300" nowrap>

<table width="300" border="0" cellspacing="0" cellpadding="0" style=" border-style: dotted; border-color: #C0C0C0;
border-top-width: 0px; border-bottom-width: 2px; border-left-width: 0px; border-right-width: 0px">
<tr>
<td nowrap valign="top" align="left">&nbsp;</td>

<td width="210"><p class="foromensajetitulo"><b><?=$titulo?></b></p></td>

<td nowrap width="90" height="40" align="right" valign="middle" ><a href="postear.php?id=<?=$id?>&responder=2"><img border="0" src="imagenes/responder.gif" width="80" height="15"></a><a href="postear.php?id=<?=$id?>&citar=1"><br>
<img border="0" src="imagenes/citar.gif" width="80" height="15"></a></td>
<td nowrap valign="top" align="right">&nbsp;</td>
</tr>
</table>

<p><?php include ('mensaje.php'); ?></p>
<p>&nbsp;</p></td>
</tr>
<tr>
<td colspan="2" height="5"><p align="right"><a href="#top"><img border="0" src="imagenes/up.gif" width="20" height="15"></a></p></td>
</tr>
</table>





y por último el mensaje.php que estamos editando:

1º como esta ahora que funciona



<p><?php

print $mensaje;

?></p>




2º el que estamos editando, y no funciona:




<?php

$post = $mensaje;


function bbcode($texto) {
$texto= eregi_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $texto);
$texto= eregi_replace("\[i\]([^\[]*)\[/i\]","<i>1</i>", $texto);
$texto= eregi_replace("\[u\]([^\[]*)\[/u\]","<u>1</u>", $texto);
$texto= eregi_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $texto);

return $texto;

}

$post = bbcode ($post);
print $post;

?>



31/Ago/2006 23:50 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#17 ·
RE: bbcode

Es raro... prueba una cosa:

Cambia:
$post = $mensaje;
por:
$post = $row["mensaje"];



Si te sale exactamente el mismo error, si es otro no lo hagas, haz tambien esto:

Cambia:
function bbcode($texto) {
por:
function xzzbbcode($texto) {

y

Cambia:
$post = bbcode ($post);
por:
$post = xzzbbcode ($post);

01/Sep/2006 00:07 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#18 ·
RE: bbcode

con lo primero no sale nada,
y con lo segundo el mismo error pero con xzzbbcode



01/Sep/2006 00:16 GMT+1
EffectedCard
Administrador
Administrador

Haz clic para ver el perfil del usuario

Usuario PRO Usuario PRO
Mensajes: 9.272
Desde: 16/Oct/2004
#19 ·
RE: bbcode

Tengo una idea. Crea un fichero llamado fbbcode.php (lo puedes llamar como quieras siempre y cuando modifiques bien el resto de codigos que te voy a poner a continuacion) que tenga este codigo:

<?php
function bbcode($texto) {
$texto= eregi_replace("\[b\]([^\[]*)\[/b\]","<b>1</b>", $texto);
$texto= eregi_replace("\[i\]([^\[]*)\[/i\]","<i>1</i>", $texto);
$texto= eregi_replace("\[u\]([^\[]*)\[/u\]","<u>1</u>", $texto);
$texto= eregi_replace("\[url=([^\[]*)\]([^\[]*)\[/url\]", "<a target='_blank' href='\1'>\2</a>", $texto);
?>

En el mensaje.php pones:

<?php
$post = bbcode($mensaje);
print $post;
?>



Despues en foro.php buscas:
include('cabecera.php');

y añades debajo:

require_once('fbbcode.php');

si no se llama fbbcode.php cambia ese trozo.





Con eso creo que bastara. Creo que lo que pasa es que ese mensaje.php lo inserta mas de una vez y entonces si que crea 2 veces la funcion. El error es eso que, de una manera u otra, repite la funcion bbcode(). Yo creo que con lo que te he puesto sera suficiente.

01/Sep/2006 02:38 GMT+1
rehivaJ
Webmaster HTML
Webmaster HTML

Haz clic para ver el perfil del usuario
Mensajes: 50
Desde: 07/Abr/2006
#20 ·
RE: bbcode

Correcto en lo de que el archivo se repite varias veces, una por cada mensaje,
al hacer exactamente lo que me has puesto me sale un nuevo error:

Parse error: parse error, unexpected $ in /home2/ebsmund/public_html/foro/fbbcode.php on line 7



01/Sep/2006 12:25 GMT+1
Ir a la página: 1 · 2 · última
29 mensajes. Página 1 de 2
Haz clic para ir al tema anterior Haz clic para ir al tema siguiente
Portal · Foros · Zona Webmasters · PHP
Temas similares
No se han encontrado temas similares
Opciones:
Versión imprimible del tema
Subscríbete a este tema
Date de baja de este tema
Ir al subforo:  

TU NO PUEDES Escribir nuevos temas en este foro
TU NO PUEDES Responder a los temas en este foro
TU NO PUEDES Editar tus propios mensajes en este foro
TU NO PUEDES Borrar tus propios mensajes en este foro
Todas las fechas y horas son GMT+1. Ahora son las 01:26

Afiliados Plus
Skindario - Soporte Webmasters, Diseño Grafico, Miarroba, Rol + RPG y Mucho Mas TuarrobaGames - Emuladores, Roms, Juegos y RPG TuarrobaEbooks - Ebooks en castellano y Audiolibros Websmasters foro MundoDeluxe Photosherox - Diseñando & Aprendiendo
¿Tu Web Aquí?
Admin: EffectedCard - Skindario, foro soporte de Tuarroba desde el 16/10/04