Einstellungen von Menüeintrag über POST-Request

  • Mir ist wärend der Entwicklung eines Modules aufgefallen, dass Einstellungen für Komponenten-Ansichten, welche über die Menüeinträge definiert sind nicht angewendet werden, wenn die Seite mit einem POST Request aufgerufen wird.


    Als Beispiel habe ich einen Menüeintrag zu einer Kategorien-Liste (com_content) erstellt und bei diesem über die Einstellung "Leere Kategorien=Anzeigen" eingestellt. Der Menüeintrag hat die Kategorie-Id 247.

    Dann habe ich mit Postman diese Seite einmal per GET

    und einmal per POST aufgerufen

    Es ist zu sehen, dass die 2.Kategorie (Leere Kategorie) über GET korrekterweise angezeigt wird, jedoch über POST nicht!

    Wird "Itemid" über POST-Requests in Joomla mit Absicht ignoriert ? Wenn ja, gibt es einen Grund dafür?

  • Weil der Einstieg in das ganze Routing (zumindest beim alten, Legacy) eine Abfrage der URL ist (also GET-Variablen) mittels JUri. Dort wird nach einer Itemid in den vars gesucht (GET-Parametern). Wenn's die gibt, werden weitere Daten aus dem Menü-Eintrag zusammengesucht.


    An anderen Stellen wird dann aber u.U. z.B. mit $app->input->get('option') (also Abfrage POST und GET) überschrieben.

    Das ist dann der Grund, warum ein action index.php/?Itemid=290 auf einer Kontaktseite landet bei ienm POST-Formular mit einem Input <input type="hidden" name="option" value="com_contact"/>, auch wenn Menüeintrag 290 ein com_content-Menü ist. Weiter habe ich das nicht erforscht, worauf man noch achten muss.


    Bleibt dir also nichts anderes übrig, als wenigstens die Itemid in die action einzubauen. Im Normalfall schönt man die action sowieso mit JRoute::_($link), wenn man ja sowieso schon alle Bestandteile vorliegen hat..

  • Danke für den Hinweis. Tatsächlich ist mir dieses Zusammensuchen von Einstellungen in Menüeinträgen anderorts auch schon aufgefallen.


    Den POST Request lässt sich halt so schön über formData.append() zusammensetzen für eine spätere Ajax-Anfrage...


    Was meinst du mit

    Zitat

    zumindest beim alten, Legacy

    Wird sich das in Zukunft ändern?

  • Es gibt ja mittlerweile auch die sog. "moderne" URL-Generierung im Unterschied zur "kompatiblen" URL-Generierung, die man in paar Komponenten-Optionen im Tab "Integration" einstellen kann. Unter'm Strich also ein anderes Routerverhalten. Hab ich aber keine Ahnung, ob's da Unterschiede bzgl. oben gibt.