BB-Code?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
beitrag
break
disc
dsf
formen
funktion
gedacht
genau auftritt
gruss
hilfe
listen
parameter
punkt
schablone
test
variante
verschachtelung
zusammen
zusammenhang
-
Im Toturial stehen ja schon einige BB-Codes aber wie siehts mit den folgenden aus. Hat da jemand eine idee?
Gr??e zB:[size=24]
Farbe zB:[color=red]
Listen zB:
[list]
[*]rot
[*]blau
[*]gelb
[/list]
* rot
* blau
* gelb
oder:
[list=1]
[*]blau
[*]gr?n
[*]gelb
[/list]
1. blau
2. gr?n
3. gelb
oder:
[list=a]
[*]hallo
[*]zusammen
[*]tsch?
[/list]
a. hallo
b. zusammen
c. tsch?
W?r nett wenn eine ne idee h?tte...
ich hab auch schon im code von nem forum geguggt aber leider nichts gefunden...
Am Betsen w?ren nat?rlich in form einees Regex(also preg_replace)
Dankeim Vorraus und Gru?
NGK
Beitrag ge?ndert am 24.04.2006 21:03 von ngk -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi,
ich schreib mal eben schnell aus der Hand:
// [color=red]TEST[/color] $text = 'Hallo ich bin ein [color=red]TEST[/color]'; $text = preg_replace('/\[color=(.*?)\](.*?)\[\/color\]/si', '<div style="color:\\1">$2</div>', $text); // [size=20]TEST[/size] $text = 'Hallo ich bin ein [size=20]TEST[/size]'; $text = preg_replace('/\[size=(.*?)\](.*?)\[\/size\]/si', '<div style="font-size:\\1px">$2</div>', $text);
Wie gesagt ist ungetestet und aus der Hand geschrieben, gibt sicher noch sch?nere Varianten.
mfG
Beitrag ge?ndert am 24.04.2006 21:26 von weedgame -
bist du dir sicher dass zwischen div und /div jeweils $2 kommt und nicht \2 (oder /2 keine ahnung)???
also cih glaube so ist es richtig:
$str = preg_replace('/\[color=(.*)\](.*)\[\/color\]/Uis', '<font color="\1">\2</font>', $str); $str = preg_replace('/\[size=(.*)\](.*)\[\/size\]/Uis', '<font size="\1">\2</font>', $str);
Beitrag ge?ndert am 24.04.2006 21:55 von ngk
Beitrag ge?ndert am 28.04.2006 14:15 von ngk -
hat irgendwer noch ne idee wie cih das mit der liste machen k?nnte?
-
das ist doch eine gute M?glichkeit. Ansonsten g?be es nur noch JavaScript. Das ist aber genau so umst?ndlich zu schreiben und funktioniert nicht bei allen, n?mlich bei denen nicht, die JS browserseitig ausgestellt haben.
-
Sry f?r die lieblosen und komischen Kommentare. Ich bin noch nicht ganz wach. >.<
Mit den beiden folgenden Funktionen kann man das mit dem BBCode [list] machen. Anf?hrungszeichen sind egal, aber Gro?- und Kleinschreibung nicht.
M?gliche Varainten sind:
[list=1]etc.
[list=a]etc.
[list=A]etc.
[list=i]etc.
[list=I]etc.
[list=square]etc.
[list=disc]etc.
[list=circle]etc.
Keine Ahnung ob da noch einiges Verbesserungsw?rdig ist, aber so funktioniert es auf jeden Fall.
<?php //________________________________________________ //Funktion zum Ermitteln des Parameters der Liste// // Und zum Erstellen der Replace-Schablone // // function bbcode_list_param($string){ //Filtern des Parameters $param = preg_replace('`\[list=(.*)\](.*)\[\/list\]`Uis','\\1', $string ); //Entfernen von moeglichen Anfuehrungszeichen $param = preg_replace('`\"(.*)\"`Usi','\\1', $param); //Entfernen von moeglichen Leerzeichen $param = trim($param); //Fallunterscheidung und Erstellung der Replace-Schablone fuer preg_replace switch($param){ case "a": $replace = '<ol style="list-style-type:lower-latin;">\\1</ol>'; break; case "A": $replace = '<ol style="list-style-type:upper-latin;">\\1</ol>'; break; case "1": $replace = '<ol style="list-style-type:decimal;">\\1</ol>'; break; case "i": $replace = '<ol style="list-style-type:lower-roman;">\\1</ol>'; break; case "I": $replace = '<ol style="list-style-type:upper-roman;">\\1</ol>'; break; case "circle": $replace = '<ul style="list-style-type:circle;">\\1</ul>'; break; case "square": $replace = '<ul style="list-style-type:square;">\\1</ul>'; break; case "disc": $replace = '<ul style="list-style-type:disc;">\\1</ul>'; break; default: $replace = '<ul>\\1</ul>'; } return $replace; } //_________________________________________ //Funktion zum Umwandeln des BBCodes [list]// // function bbcode_list($string){ //Schablone holen $replace = bbcode_list_param($string); //Entfernen des Parameters aus dem urspruenglichen String $string = preg_replace('`\[list=(.*)\](.*)\[\/list\]`Uis','[list]\\2[/list]', $string ); //Umwandeln des BBCodes $string = preg_replace('`\[list\](.*)\[\/list\]`Uis',$replace ,$string); //Umwandeln der einzelnen Listenpunkte $string = preg_replace('`\[\*\](.*)\n`Umi','<li>\\1</li>',$string); return $string; } $string = ' [list="i"] [*]Test [*]Test [*]Test [/list]'; $string = bbcode_list($string); echo $string; ?>
-
Danke schonmal, hat sehr weiter geholfen...
Es funktioniert nur nicht wenn man mehrere typen von listen in einem Text hat (weil $param immer ?berschrieben wird)oder hat jemand daf?r vielleicht noch eine l?sung?
Gru?
NGK -
Also theoretisch sollte eigentlich alles gut funktioniere, solange du auf die Verschachtelungen aufpasst. Beschreibe mal n?her, wann es genau auftritt. (Also du meintest irgendwas von einem Text. Was f?r ein Text genau?)
-
aalso wenn du mehrere arten von listen in eiem Text benuzt: zB
$string = ' [list=a] [*]sdf [*]sdf [*]sdf [/list] [list=A] [*]sdf [*]sdf [*]sdf [/list] [list=I] [*]sdf [*]sdf [*]sdf [/list] [list=i] [*]sdf [*]sdf [*]sdf [/list] [list=1] [*]dsf [*]df [*]sdf [/list] [list=circle] [*]sdf [*]sdf [*]sdf [/list] [list=disc] [*]sdf [*]sdf [*]sdf [/list] [list=square] [*]sdf [*]sdf [*]sd [/list] [list] [*]sdf [*]sdf [*]sdf [/list]'
dann wierdne alle listen mit dem lezten parameter ersetzt: in dem fall square. und das will man ja nicht
hast du da noch eine l?sung? Ich hatte chon gedacht das in ein array zu schreiben aber dann m?sste man ja f?r jede liste irgendwie den index ?brgeben...
Gru? NGK -
Das Problem ist, das bei der Funktion, die die Parameter ermittelt alle Parameter in einen String geschrieben werden. Somit gibt es bei dem swtich nat?rlich Probeleme. Au?erdem m?sste man das dann eh mit Arrays machen. Ist denke ich nicht wirklich schwer, aber ich habe jetzt keine Zeit und keine Lust es zu machen. Vielleicht schaffst du es ja auch alleine. ;)
-
hallo ich brauch hilfe den ich m?chte ne bb-code vorschau machen aber sie funktioniert nicht mehr
-
Hallo Zusammen.
Ich greife mal meinen alten Thread auf, um noch eine Frage zu stellen, die auch im Zusammenhang mit den listen auftrat:
ich will als eine Listenart einen Pfeil anstatt des Punktes anzeigen lassen. Der HTML-Code stimmt, nur mit den Regexen hab ich immer Probleme ;) .
$str = preg_replace('#\\[list=->\](.*)\[\/list\]#Uis',
'<ul style="list-style-image:url(../gfx/icons/arrow.gif)">\1</ul>',
$str);
$str = preg_replace('#\\[list=\"->\"\](.*)\[\/list\]#Uis',
'<ul style="list-style-image:url(../gfx/icons/arrow.gif)">\1</ul>',
$str);
hier soll [list=->] bzw. [list="->"] durch <ul style="list-style-image:url(../gfx/icons/arrow.gif)">\1</ul> ersetzt werden. Nur leider Funktionierts nich :P . Vielleicht kann mir irgendwer weiterhelfen?! Was muss ich escapen oder machen?
Danke schonmal
Gruss NGK -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage