Mal eine Frage an die etwas Erfahreneren Leute hier
Ich stehe seit kurzem vor einem Problem bei dem ich irgendwie nicht wirklich weiterkomme.
Ich bin gerade dabei, XContent so zu erweitern, dass man Inhaltsblöcke "on the fly" beim Bearbeiten einer Seite hinzufügen kann, ohne das Template ändern zu müssen. Die Inhaltsblöcke werden dann in einer Tabelle in der Datenbank gespeichert.
Im Template kann man dann anstelle jeden Inhaltsblock von Hand setzen zu müssen einfach einen Bereich definieren (z.B. {content block="left" type="area"}). Beim Bearbeiten einer Seite kann man dann für jeden Block festlegen in wechem dieser Bereiche er angezeigt werden soll.
Im Moment ist es so, dass die Reihenfolge der Blöcke nicht geändert werden kann. D.h. sie werden im Frontend der Reihe nach so angezeigt, wie sie im Backend erstellt wurden. Ich möchte jetzt eine Sortierfunktion einbauen mit der man die Blöcke im Backend hin und her schieben und die Reihenfolge selbst festlegen kann. Dazu benutze ich
jQuery Sortable. Das funktioniert auch wunderbar. Nur leider gibt es bei den Inhaltsblöcken, die einen WYSIWYG Editor beinhalten ein Problem. Genaugenommen liegt das Problem beim iFrame des Editors.
Da das iFrame beim Umsortieren des Inhaltsblocks komplett "geklont" wird, d.h. als neues HTML Element in das bereits bestehende DOM eingefügt wird, kommt es beim Firefox und beim Safari dazu, dass der Inhalt des iFrames versucht wird, neu zu laden. Das ist ein browserspezifisches Problem, wofür es schon seit einer halben Ewigkeit leider keine Lösung gibt. (IE hab ich hier nicht zur Hand, aber da soll es wohl keine Probleme geben)
Das Problem ist allerdings, dass das iFrame des Editors kein wirkliches src Attribut hat bzw. steht dort als Addresse "javascript". D.h. dort kann nichts wirklich geladen werden.
Um es kurz zu machen: Der Editor funktioniert für den neu sortierten Block nicht mehr. Der Inhalt ist weg und auch sonst kann man mit dem Editor nichts mehr anfangen, da alle Funktionen auf ein Element innerhalb des Iframes zugreifen wollen welches - aufgrund des fehlerhaften Neuladens des iFrame Inhalts - nicht mehr existiert.
Meine Idee besteht nun darin, den
kompletten Inhalt des iFrames (inklusive und aller verlinkten Scripte und Stylesheets - also das komplette "Objekt" oder "Dokument" - oder wie auch immer man das nennen mag - im iFrame) vor dem Sortiervorgang auszulesen und danach wieder einzufügen. Und genau das will leider nicht so ganz funktionieren. Wobei ich noch nicht weiß, ob der Tiny damit dann wieder funktioniert. Es ist nur eine Idee.
Meine Suche im Netz bringt mich immer wieder nur zu solchen Spielereien wo Leute versuchen den Inhalt eines iFrames "auszuspionieren".
Ich möchte es aber genau umgekehrt machen. Ich möchte etwas in das iFrame
hinein bringen. Und zwar ein komplettes Dokument mit allem drum und dran. Nur irgendwie scheint das nicht so zu funktionieren, wie ich mir das vorstelle.
Geht das überhaupt?
Hat hier jemand mit solchen Dingen Erfahrung?
Einfaches HTML in ein iFrame hineinzubringen ist kein Problem. Nur landet das alles im des iFrames. Der bleibt leer.
Bei einem kompletten Objekt endet es immer damit, dass ich im iFrame dann [objekt Objekt] stehen habe.
Oder ich bekomme eine Fehlermeldung in der Konsole, dass das so nicht geht.
Ich bin mir aber ziemlich sicher, dass das irgendwie gehen muss, denn schließlich generiert der Editor den Inhalt des iFrames ja auch nur via Javascript.
Ein anderer Ansatz wäre, das API des Editors zu nutzen und einfach zu sagen, dass er den Inhalt des versteckten Textareas neu rendern soll. Also die Javascript Funktion, die stellvertretend für das src Attribut des iFrames steht. Nur weiß ich erstens nicht welche das ist und zweitens würde ich damit XContent von einem ganz bestimmten Editor abhängig machen.
Und genau das möchte ich gerne vermeiden.
Schonmal danke fürs lesen