Drupal Integration des CKEditor und CKFinder

CKEditor

Der CKEditor ist die Weiterentwicklung des weit verbreiteten FCKEditors. Er ist schneller und er erlaubt das Verändern der Grösse des Editorfensters.

Die Integration von CKEditor in Drupal gelingt zur Zeit (Februar 2010) nur vollständig durch das Installieren des Modules CKEditor. Die Installation mit dem an und für sich eleganten Ansatz des Wysiwyg-Modules scheitert zur Zeit an der (normalen, mit Patches aber evtl. möglichen) Integration des IMCE für das Hochladen von Dateien und Bildern.

Der CKEditor lässt sich wie jedes andere Drupal Modul installieren. Den eigentlichen CKEditor entpackt man in /sites/all/libraries/ckeditor/ (oder wie herkömmlich im Verzeichnis des installierten Modules selber).

Konfiguration

Der CKEditor lässt sich auf einfache Weise konfigurieren. Alle Optionen erhält man hier: http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html

Für die Konfiguration ändert man die Datei: /sites/all/modules/ckeditor/ckeditor.config.js
Möchte man bspw. keine fixen Fontgrössen (12,14,16,...) sondern smaller;larger;xx-small usw. fügt man eine Zeile vor der letzten Klammer }; zu:

config.fontSize_sizes = 'smaller;larger;xx-small;x-small;small;medium;large;x-large;xx-large' ;

CKEditor (Drupal) Version 1.8 keine Werkzeugleisten sichtbar?

Bis Version 1.8 konnten die alten ckeditor.config.js übernommen werden. Ab Version 1.8 jedoch werden die Werzkzeugleisten nach der letzten Klammer } definiert. Siehe dazu auch http://drupal.org/node/1333882#comment-5290126 und folgender Beitrag.

Spellchecker aktivieren

In Version 3.1 des CKeditors sind die Plugins neu organisiert worden. Es fehlt das Plugin für die den nativen Spellchecker (nur Firefox und Safari). Dieser lässt sich "nachrüsten", in dem man das Plugin wysiwygarea von der Version 3.0.1 in das Verzeichnis /sites/all/libraries/ckeditor/plugins kopiert. Zusätzlich muss evtl. in ckeditor.config.js diese Zeile angefügt werden.

config.disableNativeSpellChecker = false;

CKFinder

Interessant ist die Integration des Dateienhandlers CKFinder in den CKEditor (oder auch in den FCKeditor), der jedoch kommerziell ist und für die Benutzung 59$ kostet. Er lässt sich zur Probe im Demomodus betreiben mit voller Funktionalität.

Installation

Zur Vorbereitung wird in sites/default/settings die Variable $cookie_domain gesetzt. Dies wird für die Authentifizierung der Benützung des CKFinders benötigt.

$cookie_domain = 'www.inetcom.ch';  // die richtige Domain eintragen

Den herunter geladenen CKFinder in /sites/all/modules/ckeditor entpacken.

Die Datei /sites/all/modules/ckeditor/ckfinder/config.php muss nun editiert werden. Die php-Funktion CheckAuthentication() muss dafür angepasst werden. Die Zeile return false; mit // auskommentieren:

//      return false;

Dann eintragen in config.php (Code dankenswerter Weise von http://groups.drupal.org/node/24825) innerhalb der Funktion CheckAuthentication:

function CheckAuthentication()
    static $authenticated;
    if (!isset($authenticated) && empty($authenticated) == TRUE || $authenticated == FALSE) {
        $drupal_path = "../../../../";
                $cwd = getcwd();
                chdir($drupal_path);
                require_once "./includes/bootstrap.inc";
                drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
                global $user;
                if (!is_array($user->session)) {
                    $user->session = array();
                }
                if (is_null($user->session['authenticated'])) {
                    $user->session['authenticated'] = '';
                }
                if (is_array($user->roles) && is_null($user->roles[1])) {
                    $user->session['authenticated'] = true;
                } else {
                    $user->session['authenticated'] = false;
                }
                $authenticated = $user->session['authenticated'];
            }
        chdir($cwd);
    }
    return $authenticated;
}

Die Zeile beginnend mit $baseUrl zufügen:

$baseUrl = '/sites/default/files/';

CKFinder landet immer in einem Verzeichnis "images". Wer das Verzeichnis jedoch selber wählen will, der ändert die Zeile 'directory' => $baseDir . 'images', in:

'directory' => $baseDir,

Ebenso für das Hochladen anderen Dateitypen wie Flash, der Code findet sich leicht.

Es sollten die Rechte noch angepasst werden, sie stehen auf 777 (Schreibrechte auch für alle). Sinnvoll bei einem sorgfältig eingerichteten Webserver sind:

$config['ChmodFiles'] = 0775 ; // oder 0664 wenn die Dateien das Execute-Flag nicht gesetzt haben sollen.

und

$config['ChmodFolders'] = 0775 ;

Es gibt noch weitere Konfigurationsmöglichkeiten, bspw. die erlaubten 'File-Extensions' für den Upload. Standardmässig sind bmp,gif,jpeg,jpg,png definiert.

Fehler?

Es kann sein, dass sich auf dem Statusbericht (von Drupal) folgende rot hinterlegte Meldung findet:

You are using a feature that requires manual integration into config.php (either built-in filebrowser or quick uploads are enabled in the Advanced profile). Read instructions about enabling built-in file browser and add "require_once ..." statement in editor/filemanager/connectors/php/config.php.

Diese Meldung ist offensichtlich falsch, denn erstens wurde der CKFinder  ja schon integriert und zweitens gibt es keine Datei editor/filemanager/connectors/php/config.php. Das scheint ein Überbleibsel aus Zeiten des Vorgänger FCKeditor zu sein. Um die Meldung auf eine schnelle und einfache Art los zu werden muss in der Datei /sites/all/modules/ckeditor/ckeditor.install die Zeile

$require_once_found = FALSE;

in

$require_once_found = TRUE;

geändert werden. Das ist nicht sehr elegant, aber effektiv und einfach.