Ankündigung

Einklappen
Keine Ankündigung bisher.

[Gelöst] BBCode Parser, Fehler beim rendern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Gelöst] BBCode Parser, Fehler beim rendern

    Hallo,
    ich habe ein Gästebuch, welches die Einträge mittels AJAX aus der Datenbank liest.

    Hier die Fetch-Methode.

    PHP-Code:
    public function fetch()
    {
            if( 
    $this->request->isAJAX() )
            {
                
    $output '';

                foreach(
    $this->db->query($this->_sql_query_all())->getResultArray() as $row)
                {
                 
    $output .= '
                 <div class="panel panel-default">
                  <div class="panel-heading">By <b>'
    .$row["name"].'</b> on <i>date.........</i></div>
                  <div class="panel-body">'
    .$row["message"].'</div>
                  <div class="panel-footer" align="right"><button type="button" class="btn btn-default reply" id="'
    .$row['id'].'">Reply</button></div>
                 </div>'
    ;
                }

                return 
    $output;
            }
            else
            {
                return 
    'Fehler.';

            }

    Und hier die Javascript-Funktion dazu.
    Code:
    function load_comment()
         {
          $.ajax({
          url:"base_url().guestbook/fetch",
           method:"POST",
           success:function(data)
           {          
                $('#display_comment').html(data);
                console.error("Errors", result.error);
                console.dir(result.errorQueue);
                console.log(result.html);
           }
          })
         }
    Das funktioniert auch einwandfrei. Angezeigt werden die Kommentare über

    HTML-Code:
    <div id="display_comment"></div>
    Nun bin ich auf einen Javascript-BBcode-Parser aufmerksam geworden.


    Code:
    function load_comment()
         {
          $.ajax({
           url:"base_url().guestbook/fetch",
           method:"POST",
           success:function(data)
           {          
                   result = XBBCODE.process({
                             text: data,
                             removeMisalignedTags: false,
                             addInLineBreaks: true
                      });
    
                $('#display_comment').html(result.html);
                console.error("Errors", result.error);
                console.dir(result.errorQueue);
                console.log(result.html);
           }
          })
         }
    Der funktioniert auch wunderbar, lediglich gibt er meine Kommentare als string aus. Sprich, ich sehe die komplette HTML-Struktur.

    Ich habe mit den Parser mal genauer angeschaut und er escaped zunächst "<" und ">" und macht das daraus "&lt;" bzw. "&gt;".

    Dann wandelt er meine BBCodes

    [tag]inhalt[/tag]

    um zu

    <tag>inhalt</tag>

    und wandelt anschließend die "&lt;" bzw. "&gt;" wieder zurück zu "<", ">".

    Kennt jemand den XBBCode-Parser und kann helfen?

    Am Liebsten wäre es mir, (siehe fetch()), dass er auf

    PHP-Code:
    <div class="panel-body">'.$row["message"].'</div
    die Klasse "panel-body" zugreift und lediglich die "message" nach BBcodes untersucht.

    LG, hobbyphp

  • #2
    Du übergibst HTML-Code an den BBCode-Parser? Das klingt einfach nur falsch. Warum machst du sowas?

    Du darfst den HTML-Code nicht mit PHP erzeugen, sondern musst das mit JavaScript tun.

    Kommentar


    • #3
      Das ist ja kein Problem. Ich lerne gerne dazu.
      Ich habe sowieso noch vor, den HTML-Teil nachher über eine "view" zu laden. Das ist alles erstmal zu Testzwecken.
      Optimieren kann man immer noch. Und das ist mir bewusst.
      Ich habe einen BBCode Parser auf PHP-Basis, würde aber gerne auf JS umsteigen.

      Hast Du eine Idee?

      Kommentar


      • #4
        Ich habs hinbekommen. Folgendes:

        Zunächst gibt fetch() ein Array aus der Datenbank als JSON-Array zurück:

        PHP-Code:
        public function fetch()
        {
        //...

               
        return json_encode($this->db->query($this->_sql_query_all())->getResultArray());

        Nun mittels Javascript:

        Code:
        function load_comment()
             {
              $.ajax({
               url:"base_url().guestbook/fetch",
               method:"POST",
               success:function(data)
               {
                   var html_string = '<div class="panel panel-default">';
        
                   var jsonObject = $.parseJSON(data); //Only if not already an object
                        $.each(jsonObject, function (i, obj) {
                            html_string += '<div class="panel-heading">By <b>' + obj.name + '</b> on <i>date.........</i></div>';
                            html_string += '<div class="panel-body">' + XBBCODE.process({
                                                                              text: obj.message,
                                                                              removeMisalignedTags: false,
                                                                              addInLineBreaks: true
                                                                            }).html + '</div>';
                            html_string += '<div class="panel-footer" align="right"><button type="button" class="btn btn-default reply" id="id.......">Reply</button></div>';
                        });
        
                   html_string += '</div>';
        
                    $('#display_comment').html(html_string); //result.html
                    console.error("Errors", result.error);
                    console.dir(result.errorQueue);
                    console.log(result.html);
               }
              })
             }
        Für Personen, die an ähnlichen Sachen basteln.

        Danke für Deinen Tipp. Hätte auch direkt selbst auf das JSON-Array kommen können.

        LG

        Kommentar

        Lädt...
        X