kostenloser Webspace werbefrei: lima-city


BB-Code?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    n*k

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
  4. Autor dieses Themas

    n*k

    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
  5. Autor dieses Themas

    n*k

    hat irgendwer noch ne idee wie cih das mit der liste machen k?nnte?
  6. 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.
  7. 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; 
    ?>
  8. Autor dieses Themas

    n*k

    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
  9. 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?)
  10. Autor dieses Themas

    n*k

    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
  11. 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. ;)
  12. hallo ich brauch hilfe den ich m?chte ne bb-code vorschau machen aber sie funktioniert nicht mehr
  13. Autor dieses Themas

    n*k

    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
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!