Wie funktioniert Ajax mit der neuen Module Struktur von Joomla?

  • Joomla Version
    5
    PHP Version
    PHP 8.3.x
    Hoster
    Lokal

    Hallo,
    ich bin gerade dabei ein selbst erstelltes Modul, welches ein einfaches Kontaktformular via Ajax versendet, auf die neue Modul-Struktur mit Provider umzustellen.

    Bei der Anpassung habe ich mich an das Tutorial auf https://manual.joomla.org/docs gehalten.

    Die alte Struktur sah wie folgt aus:

    - language/
    - media/
    - src/
    - tmpl/
    - helper.php (da liegt die Ajax Funktion)
    - mod_eigenesmodul.php
    - mod_eigenesmodul.xml

    Die neue Struktur sieht jetzt so aus:

    - language/
    - media/
    - services/
    - src/
    - src/Dispatcher/...
    - src/Helper/ModEigenesmodulHelper.php (hier liegt die Ajax Funktion derzeit)
    - src/forms/
    - tmpl/
    - mod_eigenesmodul.xml

    Bei versenden bekomme ich dann folgenden Fehler:

    Code
    {
        "error": true,
        "code": 0,
        "message": "Class \"Joomla\\Module\\BasicForms\\Site\\Helper\\ModuleHelper\" not found"
    }


    Was hab ich falsch gemacht? Muss die Helper Klasse bzw. die Ajax Funktion wo anders eingebunden sein? Über eine Anregung oder Idee währe ich dankbar.


    Mirko

  • Ja, die Ajax Funktion muss in den Helper des Modules.

    Der Name der Funktion muss mit "Ajax" enden. Z.b getNmbArticlesAjax.

    Der Provider muss die HelperFactory haben.

    Der Dispatcher muss den HelperFactoryAwareTrait haben.

    Step 9 Adding Ajax | Joomla! Programmers Documentation
    In this step we add Ajax to mod_hello and also describe
    manual.joomla.org

    JoomGallery::friends ist aktuell noch auf der Suche nach Helfern für die JoomGallery 4 Entwicklung!

    Gesucht sind Leute für die PHP-Entwicklung, zum Testen, Übersetzen und Dokumentieren.

    Bei Interesse melde dich per PM oder Mail bei mir (Elfangor93).

  • Ok, eigentlich hab ich das soweit ich es verstanden hab eingerichtet.

    In der services/provider.php steht jetzt fogendes:

    In src/Dispatcher/Dispatcher.php steht das:


    Das Ajax-Script wird wie folgt aufgerufen:

    Und die Funktion in der src/Helper/BasicFormsHelper.php ist wie folgt benannt (Funktionsinhalt ist nur ein Beispiel):


    Ich kann erstmal nichts erkennen was fehlt. Oder habe ich was übersehen?

    Mirko

  • Gemäss Dokumentation soll man den Dispatcher vom Joomla\CMS\Dispatcher\AbstractModuleDispatcher extenden. Also

    Code
    class Dispatcher extends AbstractModuleDispatcher implements HelperFactoryAwareInterface
    {
        use HelperFactoryAwareTrait;


    Quelle:

    Example Basic Module | Joomla! Programmers Documentation
    If you're completely new to Joomla development you'll probably find it easier to go through the Module Tutorial,
    manual.joomla.org


    Zudem benutzt du Joomla\Module\BasicForms als Namespace für dein Modul. Entwickelst du das für den Joomla Core?
    Wenn nicht ist das nicht gute Praxis. Ich empfehle dir einen Namespace zu verwenden, der nicht mit Joomla beginnt, um Konflikte mit Core-Klassen zu vermeiden.

    JoomGallery::friends ist aktuell noch auf der Suche nach Helfern für die JoomGallery 4 Entwicklung!

    Gesucht sind Leute für die PHP-Entwicklung, zum Testen, Übersetzen und Dokumentieren.

    Bei Interesse melde dich per PM oder Mail bei mir (Elfangor93).

  • Zudem benutzt du Joomla\Module\BasicForms als Namespace für dein Modul. Entwickelst du das für den Joomla Core?
    Wenn nicht ist das nicht gute Praxis. Ich empfehle dir einen Namespace zu verwenden, der nicht mit Joomla beginnt, um Konflikte mit Core-Klassen zu vermeiden.

    Ergänzend zu Elfangor93: Die Verwendung von Joomla als Namespace ist nur für Joomla Core Komponenten erlaubt. Genauere Erläuterungen findest Du in diesem Dokument gleich im ersten Kapitel.

    Freundliche Grüße aus Wächtersbach, Rolf Dautrich