Dieser Beitrag betrifft ein altes Problem bei der mehrfachen Verwendung des FCKeditors in die Administration von Webseiten.
Dieser Beitrag betrifft ein altes Problem bei der Verwendung des FCKeditors in die Administration von Webseiten.
Manche Webworker, die mehrere Webseiten betreiben, wollen den Editor nicht jedesmal neu einbinden, sondern einheitlich verwenden. Das stößt dort auf Probleme, wo es um Einbindung von Bildern oder dem Upload von Bildern oder Dateien geht. Der FCKeditor ist hier auf einen bestimmten Pfad eingestimmt, sucht also immer einen bestimmten Ordner ab, in dem die Bilddateien liegen sollen. Man könnte meinen, die variierende Eingabe eines Pfades bei der Initialisierung der Editor-Instanz im Editorformular müsste reichen. Dies funktioniert aber nicht, weil die php-class, in welcher der Pfad verarbeitet ist, gekapselt ist und die Variable mit der Pfadangabe nicht so einfach "reingeholt" werden kann. Die "BasePath-Definition" hilft hier nicht weiter.
Die einzige Lösung ist eine Verwendung von SessionVariablen. Die Variable wird also bei Skriptabruf mittels php-Weichen so definiert, dass sie zum Projekt passt. Dann wird die Variable in einer Session gespeichert. Damit ist sie global verfügbar, also auch innerhalb von Klassen und Funktionen, und kann dort aufgerufen werden.
Wenn es sehr viele Projekte sind, können solche Pfadangaben auch in einer mysql-Tabelle, also eine "Projekttabelle" gespeichert werden, wo auch andere projektbezogende Dateien hinterlegt werden können. Beim Skriptstart muss also nur der Projektname definiert werden, dann die Projekttabelle abgerufen und ausgelesen werden. Dort sind auch die Pfade dabei.
Das noch zu lösende und eigentlich schwierigste Problem ist der konkrete php-Code, der innheralb der FCKeditor-Dateien für die Einbindung notwendig ist. Die Lösung hatte mich schon vor Jahren tagelange Experimente gekostet. Als ich vor kurzem die neueste Version des FCKeditors installiert habe (nach einem kurzen Seitensprung zu tinymce), bin ich erneut in Verzweiflung geraten, obwohl ich dachte, ich könnte die Lösung einfach übertragen. Gefehlt hat, wie immer, nur eine Kleinigkeit.
Das ist die Anleitung für die Einbindung der sessiongespeicherten Variablen mit den Pfadangaben in die richtigen FCKeditor-Dateien.
Zu ändern sind, in der aktuellen Version 2.6.3, nur folgende zwei Dateien:
editor/filemanager/connectors/php/config.php
und
editor/filemanger/connectors/php/connector.php
In der Config-Datei sind folgende Variablen neu zu definieren:
$Config['UserFilesPath'] = $_SESSION['user-files-path'] ;
$Config['UserFilesAbsolutePath'] = $_SESSION['user-files-absolute-path'];
Dies geht davon aus, dass im Skript die Variablen $user-files-path und $user-files-absolute-path in einer Session gespeichert wurden.
Damit das Ganze funktioniert, muss man aber in der Connector-Datei noch einen Session-Start einfügen, denn ein Session-Start im Skript (außerhalb der FCKeditor-Klasse) funktioniert seltsamerweise hier nicht. Also zu Beginn der Datei connector.php folgende Zeile einfügen:
session_start();
Entsprechende Kommentierungen bei beiden Dateien sind empfehlenswert, damit man sich bei späteren Änderungen auskennt. Insbesondere sollte man im config-Script etwa folgenden Hinweis einbauen:
// !!!!!!!!!!! Voraussetzung für die Arbeit mit sessions: session_start() am Anfang von connector.php !!!!!!!!!!!!!!!!!!
Die Session-Speicherung im Skript kann übrigens so aussehen:
if($projekt=="user-archiv") {
$_SESSION['user-files-path']="http://www.user-archiv.de/bilder/";
$_SESSION['user-files-absolute-path']="/home/..../burkes/user-archiv.de/bilder/";
}
Ältere Versionen
Wer eine ältere Version des FCKeditors benutzt, z.B. 2.4.3, und nicht updaten will, muss gleich zwei Bereiche anpassen, die in späteren Versionen vereinheitlicht wurden:
- editor/filemanager/browser/default/connectors/php/config.php
- editor/filemanager/browser/default/connectors/php/connector.php
sowie zusätzlich
- editor/filemanager/upload/php/config.php
(in diesem Zweig muss kein Session_start eingefügt werden; eine connector-Datei gibt es hier auch nicht).