Editor(-xtd) Plugin

  • Hallo in die Runde,


    ich bin dabei ein Plugin zu entwickeln.

    Das Plugin soll den WYSIWYG-Editor um einen Button erweitern, über den man dann aus einer externen Video-Mediathek ein Video oder einen Livestream auswählen können soll um ihn dann einzufügen.

    Den Button habe ich schon im Editor und bei Click wird ein Dialog-Fenster geöffnet. Das habe ich über ein Plugin gemacht, die erste Zeile der XML sieht dazu so aus :

    <extension version="3.4" type="plugin" method="upgrade" group="editors-xtd">

    In dem Dialog wird dann ein IFrame geladen in dem dann der Inhalt, bzw. die Mediathek erscheinen soll.

    Meine js Funktion hierzu sieht folgendermaßen aus:

    Code
    function testButtonClick(editor) {   
        var editor = tinymce.get(editor);
        var joomla_script_options = JSON.parse(document.getElementsByClassName('joomla-script-options')[0].innerHTML);
        editor.windowManager.open({
            title: 'Select a video that you would like to insert.',
            url: window.location.protocol+'//'+window.location.hostname+joomla_script_options["system.paths"]["root"]+'/plugins/editors-xtd/test/mediathek.php',
            width: window.innerWidth * .8,
            height: window.innerHeight * .8
        });
    }

    Jetzt meine Frage dazu. Ist der Weg soweit richtig? Oder benötige ich zusätzlich zum Plugin noch ein Modul oder eine Componente um jetzt meine Daten in der mediathek.php über eine API zu laden und anzuzeigen?

    Wenn nicht dann ist folgende, meine Frage: Wie verbinde ich die mediathek.php mit der Joomla Application um z.B. Klassen wie JUri nutzen zu können und um auf meine Plugin Parameter zugreifen zu können.


    Habe das Plugin schon einmal für WP entwickelt und möchte das nun gerne für Joomla adaptieren, bin aber mit Joomla noch nicht so fit und zu Plugin + Editor habe ich nur mäßig etwas gefunden.


    Vielen Dank

  • Ich habe nach einiger Recherche eine Lösung gefunden.


    Um den Editor (um den Button + Funktionen) zu erweitern benötige ich ein Plugin.

    Um Inhalte, im Dialogfenster, was vom Editor geöffnet wird anzuzeigen benötige ich eine Componente.


    Das Plugin und die Componente verpacke ich in ein Package und erstelle dann aus dem Package meine zu installierende Erweiterung.


    In meiner Componente habe ich das Model so abgeändert, dass es die Daten nicht aus der DB, sondern über eine externe API lädt.


    ---


    Evtl. kann mir wer einen Tipp zu folgenden zwei Fragen geben.


    1.

    Wenn ich das Package jetzt über den Extension Manager deinstalliere, bekomme ich noch eine Warnung und das Package lässt sich (ausser über die DB) nicht richtig entfernen.

    Package Uninstall: Missing manifest file.

    In meinem Nginx log kann ich folgenden Fehler sehen:

    PHP Warning: simplexml_load_file(): I/O warning : failed to load external entity "/var/www/html/joomla/administrator/manifests/packages/pkg_meinpackage.xml" in /var/www/html/joomla/libraries/src/Installer/Manifest.php on line 114"

    Die Datei existiert aber im angegebenen Verzeichniss und da ich Sie auch über den Extension Manager installiert habe hat sie auch die richtigen Rechte.


    2.

    Ich benötige zu der Erweiterung drei Variablen die vom Benutzer angegeben werden müssen (z.B. den API-Key).

    Jetzt habe ich in der Manifest-Datei des Plugins unter <config> Parameter angegeben, die dann auch über das Plugin von Benutzer eingegeben werden können.

    Dann greife ich von meiner Componente aus folgendermaßen auf diese zu:

    Code
    // Get the plugin
    $plugin = JPluginHelper::getPlugin('editors-xtd', 'plg_meinplugin');
    // Get plugin params
    $pluginParams = new JRegistry($plugin->params);
    $this->myConfig['api_key'] = $pluginParams->get('api_access_key');

    Ich führe den Code in einer Init-Methode in meiner view.html.php aus und übergebe $this->myConfig dann immer an das Model.


    Passt das so oder gibt es da einen eleganteren Weg?


    Vielen Dank