[PHP] Funcion BBCODE

W

Pues en principio este post tiene 2 metas:

1 - Que la gente que necesite la funcion ya la tenga hecha
2 - Que me ayudeis a poner mas tags

Tambien me gustaria si puede ser que me revisarais el de youtube y megavideo porque me dejan espacio pero sin embargo no integran nada.

Teneis la direccion del archivo en

www.mes-glories.es/project/config/func.txt

Y0K3S3

Gran curro willy.

shortyStyle

Me gusta la idea, probaré ese bbcode, de todas formas también habría que hacer la función contraria del bbcode, para editar posts, noticias, etc.. esa función es la que a mi me toca la moral y me peta por todas partes :(

dagavi

En YouTube has tenido en cuenta que hay 2 tipos de URL?

La URL para links que usamos todos:
http://es.youtube.com/watch?v=PPnY4jGZRdo

Y la que sale en el código:
value="http://www.youtube.com/v/PPnY4jGZRdo&rel=1"

Yo me hice lo siguiente para, si se introduce alguna en formato "link", que la transforme:

$txt = str_replace ("youtube.com/watch?v=", "youtube.com/v/", "$txt");
BlisZ

lo he leido por encima y ni lo he probado, pero si pusiera y no lo cerrara, el resto de la pagina estaria en negrita no? creo que eso deberia pasar xD

W

Si seguramente pasase eso... XD pero bueno para eso tambien lo pongo para que vayamos perfeccionandolo y añadiendole cosillas :P

Dagavi entonces como quedaria el tag entero ¿?

RedHat
// Transformamos Link si lo hay
$variable = str_replace ("youtube.com/watch?v=", "youtube.com/v/", "$variable");
// Aplicamos TAG correspondiente.
$variable = preg_replace("/\[youtube\](.*?)\[\/youtube\]/i", "<object width='425' height='355'><param name='movie' value='\\1\'></param><param name='wmode' value='transparent'></param><embed src='\\1' type='application/x-shockwave-flash' wmode='transparent' width='425' height='355'></embed></object>", $variable);

creo que así.

interpretamos que STR_REPLACE transforma el link mientras que PREG_REPLACE remplaza los [ youtube ] [ /youtube ] por el código embed.

W

Bonito, luego lo pondre y lo probare ^.

Y0K3S3

#7

Algo asi hice yo pero en c#. Para un lector de rss. (me refiero a lo del replace).

Beavis

en pear teneis un paquete para esto por si quereis comparar código http://pear.php.net/package/HTML_BBCodeParser

W

Añadido y comprobado funcionamiento del tag [youtube] proporcionado por RedHat

dagavi

Por si quieres, también me hice uno para añadir de forma sencilla (como en YouTube con [youtube]) audios de GoEar y links a Wikipedia como si estubieras en la Wikipedia (es decir: [[TAL]] lleva a la web es.wikipedia.org/wiki/TAL):

http://pastebin.es/1983

(lo pongo así ya que CODE se carga la URL, ya que la trata como una URL normal en media-vida y la acorta)

Está puesto como un vector de patrones y reemplazos, pero si quieres ponerlo como lo pones todo (varias llamadas a "preg_replace") pues sustituyes y listo xD

PD: Si eso cambia "audio" por "goear" y así queda todo nombrando el servicio (igual que pones YouTube en vez de Video)

RedHat

también estaría la función [emb] (q proviene de embeded) que son los reproductores ó contenidos externos.

pues la jodida etiqueta [ emb ] [ / emb ] te reconoce si es YOUUTBE, GOEAR, LAMADRE DEL CORDERO, y todo lo que venga.

por suposicion entiendo que

si(if) la URL es youtube.com carga el código correspondiente con la variable del videoid
elseif la url es video.google.com carga el código correspondiente de google videos con la variable de la id
elseif la url es de goear.com carga el código correspondiente del embed de goear... y así la hostia de embeds, todos bajo un mismo tag.

:) es impresionante. Y ¿COMODO? xD

RedHat

Función colorear CODIGO PHP (solo php) xd

function colorea ($texto, $tmp = false) {
    if ($tmp == true) {
        ob_start();
        highlight_string($texto);
        $ret = ob_get_contents();
        ob_end_clean();
        
$diseno = array(); $diseno[] = '<div style="border: 1px dashed black;">'; $diseno[] = '<div style="font: normal 12px verdana;">Codigo PHP:</div><br>'; $diseno[] = $ret; $diseno[] = '</div>'; return implode("\n", $diseno); } else { $arr = array(); preg_match_all('/\[php\](.*)\[\/php\]/siU', $texto, $arr); for($c = count($arr[0]); $c >= 0; $c--) { $texto = str_replace($arr[0][$c], colorea($arr[1][$c], true), $texto); } return $texto; } }
RedHat

más integrado quedaria así, además con una nueva funcion, la del quote :P.

// Antes en tu hoja de estilo necesitas definir
//.css_title (negrita y que resalte)
//.css_blockquoted (margin-left y toda la pesca que queramos)

// Citamos algo [cita]cita[/cita] 
$variable = eregi_replace("\\[cita\\]([^\\[]*)\\[/cita\\]","\n<div class=\"css_title\">Cita\n<div class=\"css_blockquoted\">\\1</div></div>", $variable); 

// Coloreamos el código php PHP [php]codigo[/php] 
    preg_match_all ("/(\[)(php)(])(.*)(\[\/php\])/iU", $variable, $l); 
    for ($i=0; $i< count($l[0]); $i++) { $variable = str_replace($l[0][$i],phpcojecolor($l[4][$i]),$variable); } 


function phpcojecolor ($php) {
    ob_start();
    highlight_string($php);
    $cfinal = ob_get_contents(); 
    ob_end_clean(); // Borramos el ob 
// mostramos información sobre las funciones... (Prox 7 lineas)
        $keycol=ini_get("highlight.keyword");  
$manual="http://www.php.net/manual-lookup.php?lang=es&pattern="; $cfinal=preg_replace( '{([\w_]+)(\s*</font>)'. '(\s*<font\s+color="'.$keycol.'">\s*\()}m', '<a href="'.$manual.'$1" title="Ayuda en PHP.net sobre $1" target="_blank">$1</a>$2$3', $cfinal); return "\n<div class=\"css_title\">Código PHP:\n<div class=\"css\">".$cfinal."</div></div>"; // Retorno el codigo PHP Coloreado }
Y0K3S3

RedHat de PhP dominas eh :-)

RedHat

AJJAAJAJ

casi amigo, que vá.

W

Redhat eso que seria como el Quote o como el Code ?

RedHat

el quote es cita. es como citar algo que alguien dijo... vease aqui es como el #1 por ejemplo, pero en vez de salir asi, pues no es dinamico, si quiseras decir lo que dijo alguien seria:

[ cita ]Más vale pájaro en mano que ciento volando[ /cita ]

tonces eso saldria resaltado... en su propio cuadro y tal como uno quisiera. es como darle por cada [ cita ] un < blockquote > pero con formato css.

no se si me he explicado bien. xD

en definitiva, QUOTE. (cita == quote en english.)

dagavi

He realizado el [emb][/emb] que dicen arriba. El código actual acepta:
· YouTube
· Metacafé
· Veoh
· Stage6
· GoEar

http://dagavi.googlepages.com/CodigoEMB.php

Usuarios habituales

  • dagavi
  • RedHat
  • willy__chaos
  • Y0K3S3
  • Beavis
  • BlisZ
  • shortyStyle