Wordpress 2.5 > tinyMCE 3.0.6 > Template Plugin zum Laufen bekommen

2 minute read

Wordpress 2.5 > tinyMCE 3.0.6 > Template Plugin zum Laufen bekommen thumb image

WordPress 2.5 kommt nach dem großen Versionsprung nun auch endlich mit der Version 3 des tinyMCE Editors daher. Bei der Konfiguration des neuen tinyMCE ist mir aufgefallen, dass das Template-Plugin bei einer bestimmten Einstellung nicht mehr funktioniert. Die Lösung liegt in der Verwendung eines anderen Initialisierungsparameters.

Doch vorerst zur Installation.

tinyMCE im WordPress Bundle wird nämlich nur mit einer spärlichen Anzahl an Plugins ausgeliefert. Dazu gehören autosave, directionality, fullscreen (Vollbildmodus beim Editieren), inlinepopups, media, paste, safari, spellchecker und wordpress. Doch tinyMCE hat mehr zu bieten und nach Anforderung sollten auch die Templates wieder mit von der Partie sein. Nach Download der aktuellsten Version auf der Seite von moxiecode (welcher dann auch alle Plugins beinhaltet) musste ich erstmal feststellen, dass mit WordPress offenbar eine noch nirgens (auch nicht im SVN) erschienene Version von tinyMCE ausgeliefert wird (vgl. aktuelle Version 3.0.5 WordPress tinyMCE 3.0.6). Ich nehme an dass in der WordPress Version einige Kompatibilitäten integriert worden sind.

Aber zurück zum Template-Plugin. Nach Kopieren in den tinyMCE Plugin-Ordner und Anpassen der tiny_mce_config.php (wp-includes\js\tinymce) an folgenden Stellen erschien schonmal der Template Button wieder:

$plugins = array( 'safari', 'inlinepopups', [...], 'template' );
$mce_buttons = apply_filters('mce_buttons', array('bold', [...], 'template' ));

[Hinweis: Die manuelle Anpassung der tiny\mce\config.php empfehle ich nicht. Diese und folgende Einstellungen können in ein WP Plugin ausgelagert werden was bedingungslos zu empfehlen ist, da sie bei einem Upgrade von WordPress ansonsten verloren gehen können; WordPress bietet zur Konfiguration von tinyMCE (insbesondere Hinzufügen eigener Buttons) Filter an!]

Die weitere (gewohnte) Definition der eigenen Templates im $initArray schlug dann aber fehl:

'template_templates' => array(
	array("TemplateName","TemplateURL","TemplateBeschreibung"),
	array("TemplateName2","TemplateURL2","TemplateBeschreibung2")
);

Die Ursache

Nach langer Recherche und Debuggen (danke Firebug!) habe ich die Ursache gefunden:

In der tinymce\plugin\verzeichnis/template/js/template.js_ wird in der init-Funktion versucht den festgelegten Parameter template_templates per tsrc = ed.getParam("template_templates", false);. auszulesen. Leider liefert die Funktion ed.getParam aber nur Strings zurück, was bei einem Array in Javascript den String „Array“ zurückgibt. Klar dass die weitere Abarbeitung (insbesondere der Versuch diesen String zu durchlaufen und URLs daraus zu ermitteln) fehl schlägt und mit folgendem Fehler abbricht (Stack aus Firebug):

u has no properties
_init(undefined, Object base_uri=Object)tiny_mce_config.p... (line 39)
_init(undefined, undefined)tiny_mce_config.p... (line 39)
init()template.js (line 24)
(no name)(Object scope=Object)tiny_mce_popup.js (line 204)
_init([Object scope=Object], function(), [Object
scope=Object])tiny_mce_config.p... (line 39)
_onDOMLoaded()tiny_mce_popup.js (line 203)
(no name)()

Die Lösung dazu

Zumindest bis der Bug gefixt wurde, ist recht einfach. TinyMCE lässt die Definition der Templates auch in einem externen Javascript-File zu.

Dazu wird einfach im initArray der Parameter template_external_list_url genutzt. Gefüllt mit dem Pfad zu einem Javascript-Datei (vgl. beispielhafter Aufbau), welche dann das Array von Templates enthält funktioniert auch der Template-Button wieder wie gewünscht.

Ein letztes Problem

Mein letztes Problem ist nur noch, dass aus unerfindlichen Gründen die Platzhalter für die Lokalisierung nicht ersetzt werden (vgl. Screenshot)

Keine Lokalisierung im Template Plugin

Wenn dazu noch jmd eine Lösung kennt und sie hier postet wäre ich sehr dankbar :)

Comments

Leave a comment — Edit this page on github and issue a PR for your comment please. HowTo?