Wie kann ich aus meiner Rich Textbox HTML-Code erstellen?

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

  • Wie kann ich aus meiner Rich Textbox HTML-Code erstellen?

    Hi

    habe mir gerade einen ganz nett aussehenden Rich Text (WYSIWYG) Editor gebaut, nach diesem Vorbild hier: http://www.mozilla.org/editor/midasdemo
    Unten habe ich den Code meines Scripts angefügt.

    Habe wie dort Buttons drüber gelegt die den Text jetzt schön formatieren können.
    Wo ich aber überhaupt nicht durchsteige und auch kein richtiges Konzept finden kann: Wie konvertiere ich die Richtext-Inhalte in HTML-Code?

    Denn das ist mein eigentliches Ziel. Ein planloser Benutzer soll sich einen Seiteninhalt zusammenbasteln und das Script soll den Code erstellen und abspeichern.
    Doch wie?

    [meine ideen]
    Hatte erst daran gedacht, bei jedem onClick-Ereignis der Buttons den passenden HTML-Code dazu in eine echte , evtl unsichtbare Textarea zu schreiben (mit getSelection() etc)
    Das stellte sich aber als Unfug heraus, denn was ist zB wenn der User von Hand was in das RTF Feld schreibt? Ein Onchange Ereignis oder sowas gibt es da ja nicht.

    Zweite Möglichkeit wäre vielleicht eine Funktion die erst aufgerufen wird wenn alles fertig ist, die RTF Box auseinander nimmt und daraus den HTML-Code erstellt. Aber eben wie?
    [/meine ideen]

    Die Seite oben erstellt ja auch HTML-Code auf Wunsch, sogar entweder mit oder ohne CSS. Aber ich steig nicht durch den Code durch wo das geschieht und wie

    Wäre euch echt dankbar wenn ihr mir ein paar Denkanstösse geben könntet wie ich die Inhalte aus meiner RTF Box ins HTML-Format bekomme.
    Ich verange jetzt garkein fertiges Script von euch nur ein paar Ideen oder Konzepte wie man das realisieren kann.

    Und bitte nicht die Fertig Editoren als Alternative empfehlen, ich machs mir immer lieber selber auch wenns haperig ist

    DAAAANKE ich zähl auf Euch


    PHP-Code:
    <html>
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <
    title>WYSIWYG-Test</title>
    <
    script>
    function 
    start() {
      
    document.getElementById('edit').contentWindow.document.designMode "on";

    }
    </
    script>
    </
    head>
    <
    body onload="start();">

    <
    table border="0" bgcolor="#C0C0C0"><tr>
    <
    td><select onchange="document.getElementById('edit').contentWindow.document.execCommand('FontName', false, this.value);">..</select></td>
    <
    td><select onchange="document.getElementById('edit').contentWindow.document.execCommand('FontSize', false, this.value);">...</select></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('Bold', false, '');">B</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('Italic', false, '');">I</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('Underline', false, '');">U</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('ForeColor', false, '#880000');">Textfarbe</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('BackColor', false, '#000000');">HG-Farbe</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('InsertImage', false, 'http://url.gif');">Grafik</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('JustifyLeft', false, '');">Links</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('JustifyCenter', false, '');">Zentriert</button></td>
    <
    td><button onclick="document.getElementById('edit').contentWindow.document.execCommand('JustifyRight', false, '');">Rechts</button></td>
    </
    tr></table><br>
    <
    iframe id="edit" width="100%" height="200px"></iframe><br><br>

    // textarea für evtl html-code:
    <textarea cols="100%" rows="10"></textarea><br><br>

    </
    body>
    </
    html
    Die Buttons sind noch etwas unsauber programmiert klar ist ja auch nur ein Test hoffe die Formatierung is sowie t ok vom Code
    Zuletzt geändert von putzlappen; 27.11.2005, 00:39.
    mfg, lappen

  • #2
    Code:
     
    document.getElementById('htmlcode').innerText=document.getElementById('edit').contentWindow.document.body.innerHTML;
    damit sollte es gehen, wenn du deinem textfeld die id htmlcode gibts,
    wenn nicht mach nen 2. iframe für den htmlcode und mach:
    Code:
     
    document.getElementById('htmlcode').contentWindow.document.body.innerText=document.getElementById('edit').contentWindow.document.body.innerHTML;

    Kommentar


    • #3
      Wenn du zu dem Konvertieren von Richtext => HTML noch was finden solltest.. Wär nett wenn du´s mich wissen lässt.. Ich hab auch das halbe Internet auf den Kopf gestellt aber nichts brauchbares gefunden. Also hab ich mit preg_replace angefangen alles um zu basteln. Funktioniert allerdings nicht SOOO prickelnd.
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        DANKE @ Heiner!!! Ich bin nun schon etwas weiter!

        @hhcm

        ja da hast du Recht, ich musste mir ebenfalls alles ausm Netz zusammenstückeln. Zu diesem Thema sind die Infos echt sehr gestreut
        ich wollte mir auch erst eine eigene Funktion basteln aber nach langem hin- und her überlegen vbin ich zum Schluss gekommen das das etwas zu heftig wird. Der HTMl-Code des ich bisher erstellt habe mit Hilfe von innerHTML ist auch ganz ok. Paar unsaubere Tags hat man immer.

        Also eben mal das was ich bisher erarbeiret habe:
        (alles steht in einem POST-Formular)

        Beim Laden der Seite wird mit <body onload="start();"> die JS-Funktion start() aufgerufen. Diese Funktion macht das iFrame-Feld 'edit' editierbar, sowohl für IE als auch Moz.Engine:

        PHP-Code:
        <script>
        function 
        start() {
            if (
        document.all) {//IE
                   
        frames.editor.document.designMode "On";
            } else { 
        //Mozilla
                
        document.getElementById('edit').contentWindow.document.designMode "on";
            }
        }
        </
        script


        So, dann habe ich eine Reihe Formatierungsbuttons( bzw -grafiken) (Für B, I, U, IMG, etc).
        In das Onclick Ereignis des jeweiligen Objekts habe ich dies gesetzt:

        PHP-Code:
        onclick="document.getElementById('edit').contentWindow.document.execCommand('Bold', false, '');" 
        (dies ist mMn nur für Mozilla und niecht für IE! Da musst du eine Abfrage wie oben einbauen und nen anderen Befehl zum Formatieren verwenden. Siehe http://www.zdnet.de/builder/program/...38120-3,00.htm

        ... damit wird der markierte Teil (oder ab Cursor) des editierbaren iFrames fett dargestellt. Das gleiche kann man dann für alle möglichen Befehle machen ist ja glaubich bekannt


        Ok jetzt komme ich zum interessanten Teil
        Ich habe es im Moment noch sehr unelegant gelöst mit dem HTML-Code, aber das Grundprinzip sollte jeder vestehen und für sich abwandeln können. Ich bin ja auch immer noch mittendrin am basteln:



        Wenn man im iFrame 'edit' alles soweit bearbeitet hat, setzt man den HTML-Code dessen in eine echte Textarea ('htmlcode') wie Heiner schon sagte:

        PHP-Code:
        document.getElementById('htmlbox').value document.getElementById('edit').contentWindow.document.body.innerHTML 
        Nun habe ich den echten HTML-Code in der Textarea 'htmlcode'.
        Darunter liegt dannn noch ein Submit Button der diesen Inhalt der Textarea (also den HTML Code des iframes) per POST an eine neue PHP-Datei übergibt, wo er weiterverarbeitet werden kann.

        Wenn man jetzt noch das Ereignis des Textarea-Füllens mit dem des Abschicken der Form verbinden könnte, wäre es ohne 2 Klicks mögllich den HTMl-Code mitzunehmen in eine neue Datei.
        Mit onsubmit im <form> Tag ging es nicht, da hat er submittet(?) bevor der Wert in 'htmlbox' angekommen war.
        Werde mich melden wenn ich dazu ne Lösung habe!


        Hier noch das iFrame und die Textearea:
        PHP-Code:
        <iframe id="edit" width="100%" height="200px"></iframe><br><br>

        <
        textarea cols="100%" rows="10" id="htmlbox" name="htmlbox"></textarea
        DANKE nochmal an alle

        mfg

        edit: hier noch die infos die ich so im netz gefunden habe und aus denen ich mir das zT zusammengebaut hab:
        http://www.tutorials.de/tutorials24357.html
        http://msdn.microsoft.com/workshop/a...commandids.asp
        http://kevinroth.com/rte/demo.htm
        http://www.php-resource.de/forum/sho...threadid=28793
        http://www.mozilla.org/editor/
        http://www.mozilla.org/editor/midasdemo/
        http://developer.mozilla.org/en/docs...ing_in_Mozilla
        http://web5.kdnr543.w-cct.de/richtext.htm
        http://www.zdnet.de/builder/program/...38120-3,00.htm
        Zuletzt geändert von putzlappen; 28.11.2005, 18:57.
        mfg, lappen

        Kommentar


        • #5
          Ich schreibe auch einen solchen Editor, allerdings würde ich gerne den Text als RTF weiterverarbeiten, geht das einfacher, als die mit innerHTML Ausgabe dann wieder nach rtf zu parsen? Also sowas wie innerRTF? Such jetzt schon den ganzen Nachmittag, habe aber kein Hinweis auf eine solche funktion gefunden.

          Kommentar


          • #6
            Original geschrieben von bajana
            Also sowas wie innerRTF? Such jetzt schon den ganzen Nachmittag, habe aber kein Hinweis auf eine solche funktion gefunden.
            Woher sollte es eine solche Funktion im nativen Funktionsumfang von Javascript geben - ist dir etwa ein Browser bekannt, der RTF unterstützt ...?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar

            Lädt...
            X