Hilfe bei Joomla 4 Komponente

  • Hallo,

    wollte mich heute mal mit der Komponentenentwicklung für Joomla 4 beschäftigen und hab ein an sich ganz gutes Tutorial von Astrid Günther gefunden. Soweit so gut, nur leider hakt es bereits bei der ersten Ansicht im Backend. Joomla sagt mir:


    Zitat

    Class 'EventNamespace\Component\Events\Administrator\Extension\EventsComponent' not found


    Danach kommt die Call-Stack Liste, da listet er mir die Datei "JROOT/administrator/components/com_events/services/provider.php:34" auf. Hab schon alles überprüft, steht aber irgendwie auf dem Schlauch. Hier die provider.php:



    Noch als Hinweis: Ich arbeite derzeit Lokal mit MAMP auf OS X.


    Kann mir jemand einen Tipp geben oder kennt jemand noch ein gutes Tutorial?



    Mirko

  • Wenn ich es richtig interpretiere, dann sagt die Meldung, dass er den angeforderten Namespace zu der Komponente nicht findet. Bei Namespace muss man genau schauen, wo man ihn declariert.

    In einem Modul habe ich es z.B. in der Helper.php und die declaration muss an erster Stelle stehen

    PHP
    /********************
    * my modul
    *********************/
    namespace ITCS\Module\MyModulName\Site;
    
    // no direct access
    defined('_JEXEC') or die('Restricted access');

    https://docs.joomla.org/J4.x:N…_Conventions_In_Joomla/de

    Wenn man die Lösung hat, dann muss man nur noch das passende Problem finden.

  • eine neue Installation erforderlich, damit Joomla alles richtig registriert.

    Meines Erachtens macht das das Plugin "Erweiterungen - Namespace Updater" on-the-fly und soweit ich mich erinnere, ist das eine Datei im Cache-Ordner, die man für Erneuerung löschen muss bzw. den Cache leeren.


    Natürlich muss dafür der Erweiterungs-Namespace in der Manifest-XML definiert sein.


    Vielleicht habe ich aber nur schlampig gelesen hier ;)

  • Meines Erachtens macht das das Plugin "Erweiterungen - Namespace Updater" on-the-fly und soweit ich mich erinnere, ist das eine Datei im Cache-Ordner, die man für Erneuerung löschen muss bzw. den Cache leeren.


    Du meinst die Datei /administrator/cache/autoload_psr4.php. Wenn ich die lösche, dann wird sie beim nächsten Laden der Seite neu erstellt. Das hat mir auch schon oft geholfen.


    Aber das Plugin wird doch nur bei einer Installation/Aktualisierung ausgeführt, richtig? Also die Datei /administrator/cache/autoload_psr4.php wird nur dann automatisch auf den neuesten Stand gebracht. Zumindest finde ich in der Datei joomla-cms/namespacemap.php at 4.0-dev · joomla/joomla-cms (github.com) nur Methoden, die zu diesen Ereignissen triggern. Oder übersehe ich was?

  • Danke für eure Hilfe. Der Fehler lag in der events.xml hatte beim Namespace-Tag "path="src" vergessen. Das mit der "autoload_psr4.php" war trotzdem sehr hilfreich, ohne das löschen der Datei hat es erst auch nicht funktioniert.


    Danke noch mal. Wird bestimmt nicht meine letzte Meldung zu dem Thema sein.

  • Aber das Plugin wird doch nur bei einer Installation/Aktualisierung ausgeführt, richtig?

    Oder, wenn du halt den Cache in Joomla löscht. Sie liegt ja im Cache-Ordner.


    EDIT: Oder anders formuliert. Ich hoffe mal, dass das Plugin neu gestartet wird, wenn die Datei gelöscht wurde. Oder irgendeine andere Routine. Andernfalls wäre das ein extrem bescheurte Implementierung, irgendwie.

  • Also, es verhält sich so. Du hast Recht bezüglich des Plugins.


    Die Application-Klasse ruft beim Ladevorgang, im ABlauf des execute(),

    Code
    $this->createExtensionNamespaceMap();

    was dann auf Umwegen in

    Code
    $extensionPsr4Loader->load();

    aus Klasse

    Code
    JNamespacePsr4Map

    landet, wo geprüft wird, ob obige Datei im Cache-Ordner existiert. Wenn nicht, wird sie neu erstellt.


    Also dachte ich, dass Joomla-Caches löschen reicht.


    Jetzt ist es aber so, dass eine der Blökerseiten von PhilETaylor behauptet, es gäbe keine gecachten Inhalte und die Löschen-Buttons für den Cache verbirgt. Sag ja, die Seiten sind halbdurchdachter Klump. Nicht die einzige von ihm.


    Das ist kompletter Unsinn auf der Seite, weil jedwede Erweiterung cachen kann, vorbei an den Cache-Einstellungen in der Konfiguration. Ich kann bspw. bei zahlreichen meiner Erweiterungen den Cache nicht mehr aus dem Backend heraus löschen.

    Zitat

    Wenn ein Zwischenspeicher (Cache) in der globalen Konfiguration aktiviert ist, werden alle gecachten Einträge hier angezeigt.


    Man muss also die Datei(en) händisch per FTP löschen. Perfekte UIX ;)


    Schlichtweg ein göttlicher Bug vom Göttlichen...

  • Oder, wenn du halt den Cache in Joomla löscht. Sie liegt ja im Cache-Ordner.


    EDIT: Oder anders formuliert. Ich hoffe mal, dass das Plugin neu gestartet wird, wenn die Datei gelöscht wurde. Oder irgendeine andere Routine. Andernfalls wäre das ein extrem bescheurte Implementierung, irgendwie.


    Das Plugin kann nur etwas tun, wenn das Ereignis im Code getriggert wird. Ich sehe nicht, dass das auf ein Löschen der Datei reagiert.


    Die andere Routine: Das Neuanlegen der Datei geschieht meiner Meinung nach mithilfe von Composer (https://github.com/joomla/joom…836ad6e/composer.json#L27) hier: joomla-cms/namespacemap.php at 4.0-dev · joomla/joomla-cms (github.com) .


    Ob diese andere Routine mit dem Installationsvorgang gleichzusetzten ist, habe ich noch nicht durchblickt.

  • Man muss also die Datei(en) händisch per FTP löschen. Perfekte UIX ;)


    Ob diese andere Routine mit dem Installationsvorgang gleichzusetzten ist, habe ich noch nicht durchblickt.


    Du siehst also auch keinen Unterschied zwischen dem Löschen der Datei und einer neuen Installation mit aktiviertem Plugin in Bezug auf das Setzen der Namespaces? Ich sehe den auch nicht, hatte aber öfter Probleme, wenn ich lediglich die Datei gelöscht habe. Ich bin dem aber nicht weiter nachgegangen.

  • Den Bug habe ich mal eingereicht: https://github.com/joomla/joomla-cms/issues/35810

    auch, wenn meine Erwartung nicht sonderlich groß ist, dass einer der verursachenden Klugsch... sich überzeugen lässt.

    Unter Joomla 4 sind meine Cache-Ordner zugemüllt mit diversem Kram diverser Erweiterungen, auch deinstallierte, die sich nicht alle löschen lassen wie in Joomla 3. Und noch nicht mal mehr ALLE angezeigt werden (also die Cache-Gruppen) wie unter Joomla 3 im Backend.