tinymce.WPWindowManager ist veraltet. Wie verwende ich stattdessen den Standard-editor.windowManager in TinyMCE 4 und WordPress 3.9?

Lesezeit: 3 Minuten

Ich habe ein TinyMCE-Plugin, das ein Popin mit dem folgenden Code öffnet:

editor.windowManager.open({
    id : 'popin-div-id',
    width : 500,
    height : "auto",
    wpDialog : true,
    title : 'Edit Options'
});

Seit ich auf WordPress 3.9 (das TinyMCE 4 einbettet) aktualisiert habe, erhalte ich die folgende Fehlermeldung in der Konsole:

tinymce.WPWindowManager is deprecated. Use the default editor.windowManager to open dialogs with inline HTML. 

Wenn ich das “wpDialog : true” Teil des obigen Codes, mein Popin erscheint nicht mehr (kein Fehler).

Was muss ich ändern, um den Standard-WindowManager in TinyMCE 4 zu verwenden? Ich habe ihre Website überprüft und konnte keine Dokumentation zum Öffnen eines Popins von einem div finden, sondern nur von einer externen HTML-Seite, siehe:

Ich hatte das gleiche Problem. Die TinyMCE-Dokumentation ist nicht hilfreich, ebenso die WordPress-Dokumentation. Ich musste ziemlich tief in den TinyMCE-Code eintauchen, um herauszufinden, wie ich mein einfaches benutzerdefiniertes Popup wieder zum Laufen bekomme.

Antworten

Verwenden Sie die html Schlüssel, um Ihr HTML in dem Objekt zu definieren, an das Sie übergeben windowManager.open. Unten verwende ich jQuery, um HTML auszuwählen, das ich auf der Seite platziert habe, indem ich mich in WordPress einklinke after_wp_tiny_mce Aktion.

tinymce.activeEditor.windowManager.open({
    title: ed.getLang('mm_tiny_mce.element_attributes'),
    width : 300,
    height : 300,
    html :
        '<div id="mm-attrs-pop" class="mm-tinymce-popup" tabindex="-1">' +
            jQuery('#mm-attrs-pop-tpl').html() +
        '</div>',
    buttons: [
        {
            text: 'Cancel',
            onclick: 'close'
        },
        {
            text: 'Set Attributes',
            onclick: function(){
                //some code here that modifies the selected node in TinyMCE
                tinymce.activeEditor.windowManager.close();
            }
        }
    ]
});

Der entsprechende TinyMCE-Code ist drin classes/ui/Window.jsinsbesondere die renderHTML Eigentum. https://github.com/tinymce/tinymce/blob/master/js/tinymce/classes/ui/Window.js

Ich hoffe, das hilft. Tschüss, Chris

  • Danke @Chris für deine Antwort! Gibt es wirklich keine Möglichkeit, die ID des Popin-Div direkt an TinyMCE zu übergeben? Ich frage das, weil ich benutze jQuery('#mm-attrs-pop-tpl').html() scheint ein Performance-Hit zu sein, und ich habe auch andere IDs in meinem Popin, also werden sie im DOM dupliziert? Ich habe auch benutzerdefinierte Ereignisse an Elemente angehängt, die in meinem Popin angezeigt werden. Muss ich sie im duplizierten div erneut instanziieren?

    – Gemeinschaft

    13. Mai 2014 um 4:04 Uhr

  • Ich habe mir den TinyMCE-Code noch einmal angesehen und es scheint mir nicht, dass es in v4.x etwas Analoges zu dem gibt id Schlüssel, der früher mit v3.x funktionierte. Ich verstehe Ihren Standpunkt zum Duplizieren von DOM-IDs – dh, dass Sie andere untergeordnete Elemente mit ID in Ihrer Vorlage haben. Der beste Weg, dies zu umgehen, wäre, Ihre untergeordneten Element-IDs in Klassen umzuwandeln: dh $('#uniqueChild') wird $('#popup .uniqueChild'). Ein einfacherer, aber weniger robuster Ansatz wäre, den HTML-Code als JavaScript-String in Ihrem TinyMCE-Code zu übergeben: html: '<div id="#popup"><div id="#uniqueChild"></div></div>

    – ChrisCarson

    13. Mai 2014 um 5:18 Uhr


  • Ich habe Ihre Antwort positiv bewertet, aber ich werde bis zum Ende des Kopfgeldes warten, bevor ich sie akzeptiere, vielleicht kann jemand mit einer besseren Lösung kommen, sonst bekommen Sie das Kopfgeld, Prost! 😉

    – Gemeinschaft

    15. Mai 2014 um 18:59 Uhr

  • Es sieht so aus, als hätte ich 50 bekommen – 25 gestern und 25 heute. Nicht sicher. Das ist das erste Mal, dass ich etwas „gewonnen“ habe. Danke, tschüss, Chris

    – ChrisCarson

    18. Mai 2014 um 22:51 Uhr

  • Nein, ich glaube, Sie haben die ersten 25 von den 3 Upvotes und die anderen 25 vom Kopfgeld bekommen … was für ein Betrug

    – Gemeinschaft

    19. Mai 2014 um 4:01 Uhr

1352200cookie-checktinymce.WPWindowManager ist veraltet. Wie verwende ich stattdessen den Standard-editor.windowManager in TinyMCE 4 und WordPress 3.9?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy