it-swarm.com.de

Wie kann ich den GEÄNDERTEN Text aus dem Joomla Editor abrufen?

Ich habe eine Seite, auf der der Benutzer den Einführungstext eines bestimmten Artikels bearbeiten kann, und ich benutze diesen Code, um dies zu ermöglichen:

$editor = & JFactory::getEditor();
$params = array('smilies'=> '0' ,'style'  => '0' ,'layer'  => '0' ,'table'  => '0' ,'clear_entities'=>'0');
echo $editor->display('introtext',$this->introtext  , '96%', '100px', 250, 40, false, null, null, null, $params);

Das Problem ist, dass ich beim Speichern der Änderungen mit jQuery/AJAX nur auf das ursprüngliche HTML zugreifen kann, mit dem der Editor initialisiert wurde. Ich habe während der Entwicklung den TinyMCE-Editor verwendet, aber die Benutzer bevorzugen JCE. Daher reichen die mit Google gefundenen redaktionellen Antworten für mich nicht aus.

Wie kommt man zu dem bearbeiteten Text, den der Benutzer speichern möchte, um gepostet zu werden? Ich war davon ausgegangen, dass dies oder ähnliches funktionieren würde, aber es ist offensichtlich nicht so:

var newHTML = $('#introtext').val();
7
GDP

Wenn ich mich richtig erinnere, verwendet JCE einen Iframe für den Inhalt. Daher müssen Sie zuerst einen Verweis auf den iframe abrufen und dann auf das innere Dokument des iframe zugreifen, das das innerHTML als den gesuchten Text bereitstellt. Ich habe das einmal gemacht, kann aber leider erst am Sonntag auf den Code zugreifen.

Ich würde mit so etwas anfangen (so erinnere ich mich, kann es jetzt nicht testen):

var iframe = document.getElementById('jform_articletext_ifr');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var currentText = innerDoc.innerHTML;

Mit currentText ist der "neue" Text.

3
elk

Die Frage von "GDP" war

"Wie gelangt man zu dem bearbeiteten Text, den der Benutzer speichern möchte, um ihn zu veröffentlichen?.

"elk" brachte mich auf den richtigen Weg, aber ich griff auf jQuery zurück, um den bearbeiteten Text tatsächlich zu erhalten. Das habe ich gemacht:

jQuery ("# ​​Array_ifr"). contents (). find ("body"). find ("p"). html ();

Woher "Array_ifr "ist die ID des iframe the JCE editor uses. Ich habe dies gefunden, indem ich die Elemente mit Firebug untersucht habe.

Das hat bei mir in einem Joomla! Umwelt, aber ich sehe es kein Problem in anderen. Hoffe, das hilft anderen Leuten bei ihrer Codierung.

2
Sheldon Seale

Es gibt keine Methode, die mir bekannt ist. Sie müssen den Originaltext speichern und dann beim Einreichen einen Vergleich durchführen.

Weitere Details, sodass der Editor im Allgemeinen auf globaler Ebene festgelegt ist. Benutzer können jedoch ihr Profil ändern, um ihren bevorzugten Editor auszuwählen.

Joomla 3.x + era lädt den Editor mit einem JFormFieldEditor, der den ausgewählten Editor lädt. Der Benutzer nimmt Änderungen im Editor vor, aber wie Sie bemerkt haben, werden diese nicht sofort im Feld angezeigt. z.B. in einem Artikel, der das Element #jform_articletext wäre.

Für die meisten Editoren hat das Formularelement jform[articletext] Jedoch den aktualisierten Inhalt, wenn das Element gespeichert wird. (Dies scheint nicht auf die AJAX Editoren zuzutreffen, die ich gesehen habe).

Ich spekuliere hier nur, aber ich stelle mir vor, dass sie (die Editoren) ein submit -Ereignis an das Hauptformular anhängen und ihren Inhalt an dieser Stelle in das Feld einfügen. Der andere Ort, den Sie überprüfen könnten, ist der "Toggle Editor" -Link, den JCE und TinyMCE haben.

In einem Artikel hat TinyMCE diesen Klick Ereignisauslöser an die Schaltfläche "Editor umschalten" angehängt:

function onclick(event) {
    tinyMCE.execCommand('mceToggleEditor', false, 'jform_articletext');
    return false;
}

Dadurch wird der Inhalt des Editors in das Feld #jform_articletext Geschrieben.

Ein anderer Ansatz könnte darin bestehen, ein submit -Ereignis an den aktiven Editor zu senden, damit dieser das Feld mit dem geänderten Text aktualisiert.

Da jeder Editor die Behandlung von submit auf andere Weise implementieren kann und nicht alle über die Schaltfläche "Editor umschalten" von MCE verfügen, müssen Sie möglicherweise für jeden zu unterstützenden Editor einen Sonderfall erstellen.

1
Craig

versuch mal kurz davor zu setzen

<?php echo $editor->save('introtext'); ?>
var newHTML = $('#introtext').val();

oder

var newHTML = <?php echo $editor->getContent('introtext'); ?>

daher wird der Text aus dem Editor in die Variable newHTML kopiert

natürlich muss sich Ihr Javascript-Code in derselben PHP-Form befinden (nicht in einer eigenständigen JS-Datei).

Dieser Thread ist ziemlich alt, aber das könnte anderen helfen ...

die Antwort von Elk ist fast genau richtig, außer dass ich sie ändern musste

var currentText = innerDoc.body.innerHTML;
0
mhall