Javascript-Editor integrieren

Mit Admidio 2.3 wird der CKEditor im Standard mit ausgeliefert. Dieser kann jetzt mit einfachen Mitteln in ein Script eingebaut werden.

Der Einbau in ein Formular ist seit Version 3.0 kinderleicht geworden. In der Regel sollte ein Formular mit der Klasse HtmlForm erstellt worden sein.

$form = new HtmlForm('edit_form', $g_root_path.'/adm_program/modules/announcements/announcements_function.php?ann_id='.$getAnnId, $page);

Nun könnt ihr an der entsprechenden Stelle einfach die addEditor Methode aufrufen und schon ist der CKEditor in eurem Formular enthalten.

$form->addEditor('ann_description', $gL10n->get('SYS_TEXT'), $announcement->getValue('ann_description'), array('property' => FIELD_REQUIRED));

Soll der Inhalt des Editors über ein Objekt oder abgeleitetes Objekt der TableAccess-Klasse gespeichert werden, so muss für das Editor-Feld eine Ausnahme bei den Methoden getValue und setValue hinterlegt werden. Dadurch wird verhindert, dass der Html-Inhalt aus dem Editor wieder entfernt wird.

    public function getValue($field_name, $format = '')
    {
        if($field_name == 'ann_description')
        {
            $value = $this->dbColumns['ann_description'];
        }
        else
        {
            $value = parent::getValue($field_name, $format);
        }
 
        return $value;
    }
 
    public function setValue($field_name, $field_value, $check_value = true)
    {
        if($field_name == 'ann_description')
        {
            return parent::setValue($field_name, $field_value, false);
        }
        return parent::setValue($field_name, $field_value);
    }

Da über den Editor nun Html-Code übertragen wird, muss dieser vor dem Speichern in die Datenbank noch validiert werden. Dazu nutzt Admidio das Script htmLawed. Dieses muss in dem Script, welches die Eingaben des Editors verarbeitet integriert werden:

require_once('../../libs/htmlawed/htmlawed.php');

Im nächsten Schritt wird dann der Inhalt des Feldes durch das Script geprüft:

$_POST['ann_description'] = htmLawed(stripslashes($_POST['ann_description']));

Soll die Editorinstanz auch den Upload von Bildern ermöglichen, so muss im Uploadscript noch ein Ordnernamen für einen Ordner innerhalb von adm_my_files angegeben werden. Dazu ruft man das Script adm_program/system/ckeditor_upload_handler.php auf und ergänzt dort die If-Struktur ca. Zeile 30 mit der neuen Editor-ID

if($_GET['CKEditor'] == 'ann_description')
{
    $folderName = 'ANNOUNCEMENTS';
}

Im letzten Schritt zur Integration des Editors muss die systemweite Prüfung aller Übergabevariablen auf Html-Code für die Id des Editor-Feldes deaktiviert werden. Dazu muss die Funktion admStrStripTagsSpecial ergänzt werden.

if($key != 'ann_description') // ckeditor-variable
{
    $srcArray[$key] = strStripTags($value);
}

Jede neue Id wird dann mit && $key != 'editor_id_name' ergänzt.

Fertig ist die Integration des CKEditors für ein weiteres Formular!

  • de/entwickler/javascript-editor_integrieren.txt
  • Last modified: 2015/10/25 22:13
  • by fasse