zsoerenm: Smilies mit BBCode von Chrisitian Seiler?

Hallo

Ich würde gerne Smilies wie z.B. :) oder ;) in kleine Bildchen in meinem Gästebuch umwandeln. Ich verwende den BBCode von Chritian Seiler... Jedoch sucht dieser immer nur nach diesen Code stücken die in Eckigen Klammern stehen... wie kann ich das ändern?

So müsste es gehen:

$bbcode->addCode (':)', 'simple_replace_single', null, 'start_tag' => '<img src="images/smilies/smile.gif">',
                  'inline', array ('block', 'inline'), array ());

http://www.christian-seiler.de/projekte/php/bbcode/

danke für Hilfe :)

Gruß Sören

  1. Hallo zsoerenm,

    Smilies lassen sich besser über Parserfunktionen ersetzen, Code ist nur für BBCode, also in eckigen Klammern vorgesehen.

    Beste Grüße
    Richard

    --
    ~§%+
    1. Hallo Richard,

      Vielen dank schon mal für deine Hilfe

      Smilies lassen sich besser über Parserfunktionen ersetzen, Code ist nur für BBCode, also in eckigen Klammern vorgesehen.

      diese Parserfunktion habe ich nciht ganz verstanden...
      Was sind Inhaltstypen? also block bzw Inline?

      es heißt als $type kann man auch eine Zeichenkette verwenden... des Weiteren wird eine funktion aufgerufen

      müsste das dann so aussehen?

      function change_smile_in_pic () {
      echo '<img src="images/smilies/smile.gif">';
      }

      $bbcode->addParser (':)' 'change_smile_in_pic()')

      Oder doch anders?

      Gruß Sören

      1. Hallo Sören,

        diese Parserfunktion habe ich nciht ganz verstanden...
        Was sind Inhaltstypen? also block bzw Inline?

        Inhaltstypen können Codes bei deren Erzeugung zugewiesen werden. Z.B. block und inline, aber auch andere, die du selbst definieren kannst. Der Funktion addParser() kannst du nun über den Parameter $type eine Zeichenkette oder ein Array von Inhaltstypen mitgeben, innerhalb derer die Parserfunktion ausgeführt werden soll.

        es heißt als $type kann man auch eine Zeichenkette verwenden... des Weiteren wird eine funktion aufgerufen

        müsste das dann so aussehen?

        function change_smile_in_pic () {
        echo '<img src="images/smilies/smile.gif">';
        }

        Nein, die Funktion muss sich selbst um das _Ersetzen_ der Smilies kümmern, also diese zunächst mit entsprechenden Funktionen suchen und ggf. durch einen <img>-Tag ersetzen.

        $bbcode->addParser (':)' 'change_smile_in_pic()')

        Nicht mit addCode verwechseln! Der erste Parameter ist der Inhaltstyp, und der heißt bestimmt nicht ':)'.

        Wenn du einen Code per

        $bbcode->addCode( 'b', 'simple_replace', null, array('start_tag' => '<b>', 'end_tag' => '</b>'), 'inline', array('block', 'inline'), array() )

        hinzugefügt hast, ist dessen Inhaltstyp 'inline'. Für diesen Inhaltstyp möchtest du nun eine Parserfunktion hinzufügen, z.b. mit

        $bbcode->addParser( array('inline', 'block'), 'replaceSmilies' )

        Funktionsname dabei ohne Klammern!

        Beste Grüße
        Richard

        --
        ~§%+
        1. Hallo Richard,

          Nein, die Funktion muss sich selbst um das _Ersetzen_ der Smilies kümmern, also diese zunächst mit entsprechenden Funktionen suchen und ggf. durch einen <img>-Tag ersetzen.

          Dann müsste dies doch so richtig sein oder?

          function replaceSmilies ($text) {
              return preg_replace ("/:)/", '<img src="images/smilies/smile.gif">', $text);
          }

          $bbcode->addParser (':)' 'change_smile_in_pic()')

          Nicht mit addCode verwechseln! Der erste Parameter ist der Inhaltstyp, und der heißt bestimmt nicht ':)'.

          So wird die obige function nun aufgerufen:
          $bbcode->addParser( array('inline', 'block'), 'replaceSmilies' );

          Jedoch bekomme ich eine Fehlermeldung:

          Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 1 in F:\Programme\xampp\htdocs\test\includes\gaestebuch_einlesen_test.php on line 33

          was mach ich in der Function falsch?

          Gruß Sören

          1. hi,

            Dann müsste dies doch so richtig sein oder?

            function replaceSmilies ($text) {
                return preg_replace ("/:)/", '<img src="images/smilies/smile.gif">', $text);

            Nein - weil dein regulärer Ausdruck nicht korrekt ist.

            Jedoch bekomme ich eine Fehlermeldung:

            Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 1 in

            Was heisst denn parentheses auf Deutsch?

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. hi,

              Dann müsste dies doch so richtig sein oder?

              function replaceSmilies ($text) {
                  return preg_replace ("/:)/", '<img src="images/smilies/smile.gif">', $text);

              Nein - weil dein regulärer Ausdruck nicht korrekt ist.

              Wie wäre der denn richtig... ich will ja kein regulären Ausdruck verwenden sondern nur diese Zeichenkette ":)" (ohne "") soll in <img src="images/smilies/smile.gif"> umgewandelt werden.

              Gruß Sören

              1. Hallo Sören.

                Dann müsste dies doch so richtig sein oder?

                function replaceSmilies ($text) {
                    return preg_replace ("/:)/", '<img src="images/smilies/smile.gif">', $text);

                Nein - weil dein regulärer Ausdruck nicht korrekt ist.

                Wie wäre der denn richtig...

                Wenn die spezielle Funktion von Klammern nicht von dir gewünscht ist, musst du sie maskieren: ). Damit drückst du aus, dass du eine literale (wortwörtliche) Klammer meinst.

                Einen schönen Sonntag noch.

                Gruß, Mathias

                --
                ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
                debian/rules
          2. Hallo Sören.

            Nein, die Funktion muss sich selbst um das _Ersetzen_ der Smilies kümmern, also diese zunächst mit entsprechenden Funktionen suchen und ggf. durch einen <img>-Tag ersetzen.

            Dann müsste dies doch so richtig sein oder?

            function replaceSmilies ($text) {
                return preg_replace ("/:)/", '<img src="images/smilies/smile.gif">', $text);
            }

            Warum nicht gleich str_replace für diese einfache Ersetzung?

            function replaceSmilies($str_text) {  
              
              $arr_smilies = array(  
                ':)' => 'smile',  
                '>:(' => 'frown'  
              );  
              
              for ($str_icon => $str_file in $arr_smilies) {  
              
                $str_text = str_replace($str_icon, '<img src="images/smilies/' . $str_file . '.gif">', $str_text);  
              }  
              
              return $str_text;  
            }
            

            Einen schönen Sonntag noch.

            Gruß, Mathias

            --
            ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
            debian/rules
            1. Hallo nochmal.

              function replaceSmilies($str_text) {

              // …

              for ($str_icon => $str_file in $arr_smilies) {

              $str_text = str_replace($str_icon, '<img src="images/smilies/' . $str_file . '.gif">', $str_text);
                }

              // …
              }

                
              Ich habe doch gespürt, dass mir irgendetwas nicht gefiel. (Warum zum Geier ist mir das enicht in der Vorschau sondern erst nach dem Absenden aufgefallen? Vielleicht weil in der Vorschau mein Stylesheet fehlt?)  
                
              So muss die Schleife natürlich aussehen:  
                
              ~~~php
                foreach ($arr_smilies as $str_icon => $str_file) {  
                
                  $str_text = str_replace($str_icon, '<img src="images/smilies/' . $str_file . '.gif">', $str_text);  
                }
              

              Einen schönen Sonntag noch.

              Gruß, Mathias

              --
              ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
              debian/rules