Routing/SEF - Menü vs. Direktlinks

  • Joomla Version
    6.1.1
    PHP Version
    PHP 8.4.x
    Hoster
    Lokal

    Liebe Joomla-Community,

    ich habe ein paar Fragen zum Routing von Joomla.

    Soweit ich verstehe sind folgende Links möglich, bspw. um eine Liste von Kategorien und Artikeln anzuzeigen:

    1. /component/content/categories
    2. index.php?option=com_content&view=categories
    3. Menu Item => List All Categories in an Article Category Tree


    Basierend darauf habe ich mich gefragt:

    • A) Nach welchen Kriterien / Einstellungen wird beim Aufruf der Links (1) oder (2) ein spezifisches Menü Item (und damit verbundes Layout) gewählt?

      Hintergrund:
      Bei mir wird automatisch die Startseite (Home) genutzt und dort z.B. die Liste der Kategorien angezeigt. Das ist aber nicht gewollt, insbesondere, da diese ein anderes Layout nutzt. Hier frage ich mich, ob allgemein durch Einstellungen/Menüs o.ä. ein Menü Item zugewiesen werden kann.
    • B) Ursprünglich war zudem eigentlich die Idee, ...
      • ... dass Inhalte nur über (versteckte oder sichtbare) Menüs erreichbar sind

        z.B. wäre eigentlich unerwünscht, dass Personen bei Kenntnis von Kategoriennamen alle Artikel dieser Kategorie auflisten, bspw. via /component/content/category/{kategorienname}
        oder
        zumindest manche Artikel auf diesen Listen (z.B. durch eine Option der Subkategorie oder Artikel) versteckt bzw. nicht angezeigt werden.

        Diese Artikel sollen weiterhin natürlich (öffentlich) aufrufbar sein, bspw. über konkrete Menüs. Daher wäre "Unpublish" oder "Access Level" Änderung hier keine Lösung.

    Was haben wir übersehen?
    Gibt es irgendwelche Einstellungen oder ein ähnliches Nutzungsszenario?

    Bonusfrage:

    • C) Gibt es eine Übersicht über alle Standardrouten von Joomla-Komponenten, so dass geprüft werden könnte, welche Access Levels was genau sehen (können)?


    Vielen Dank euch und beste Grüße!

  • Bzgl. A)

    Was schon versucht wurde:

    • Menüeintrag mit Typ "List All Categories in an Article Category Tree".
      Hierfür muss eine "Top Level Category" ausgewählt werden (bspw. Root), was jedoch eine &id=0 anfügt. Ich vermute, dass ist einer der Gründe, warum der Menüeintrag '/component/content/categories' nicht matcht:
      • index.php?option=com_content&view=categories&id=0

    Vergleichbar wird auch für "Category List" eine ID angefügt.


    Joomla-Bug?

    • Könnte natürlich auch ein "Fehler" von Joomla sein, denn ich würde erwarten, dass /component/content/categories/ den Menüeintrag mit Root-Kategorie matcht:
      (Menüeintrag hat den Link: index.php?option=com_content&view=categories&id=0)

      Vermutlich jedoch aufgrund des &id Parameters ist dies nicht der Fall.

      Nachtrag: Ich habe jedoch aus der SQL Datenbank testweise den &id Parameter händisch entfernt. Auch das hat jedoch keine Weiterleitung von /component/content/categories auf den spezifischen Menüeintrag bewirkt.
    • Related to:
      Another idea how to fix routing in joomla (?)
  • Du kannst in Joomla fast jeden Menüpunkt als Startseite festlegen. Gehe dazu in die Übersicht deiner Menüpunkte. Dort findest du die Spalte „Startseite“. Die aktuell aktive Startseite erkennst du an dem gelben Kreis mit dem Haus-Symbol.

    Alle Menüeinträge, die ebenfalls als Startseite verwendet werden können, sind mit einem grauen Kreis gekennzeichnet. Wenn du auf einen dieser grauen Kreise klickst, wird dieser Menüpunkt als neue Startseite festgelegt.

    Falls du den Namen der Startseite noch anpassen möchtest, kannst du den entsprechenden Menüpunkt öffnen und dort den Titel ändern.

    Alternativ kannst du die Startseite auch direkt innerhalb des Menüpunktes festlegen: Öffne den gewünschten Menüeintrag, gehe in den Reiter „Details“ und stelle rechts die Option „Standardseite“ auf „Ja“.

    Zu Punkt B: Ich bin mir nicht ganz sicher, ob ich dein Ziel richtig verstanden habe, beziehungsweise worin genau der gewünschte Nutzen liegt. Ich versuche es einmal:

    Du möchtest offenbar verhindern, dass Beiträge automatisch über einen Menütyp wie „Kategorieblog“ oder „Kategorieliste“ ausgegeben werden. Ebenso soll vermieden werden, dass jemand durch das Erraten einer passenden URL eine Kategorieansicht aufrufen und darüber alle Beiträge dieser Kategorie sehen kann – auch dann, wenn es dafür keinen sichtbaren Menüpunkt gibt.

    Die einzelnen Beiträge sollen aber weiterhin öffentlich erreichbar bleiben, zum Beispiel über einen eigenen Menüpunkt vom Typ „Einzelner Beitrag“.

    Dafür gäbe es aus meiner Sicht mehrere mögliche Ansätze: Wenn die Steuerung pro Beitrag erfolgen soll, würde ich mit einem Custom Field arbeiten, zum Beispiel: „In Kategorieansichten anzeigen“: Ja / Nein

    Über ein kleines Plugin könnte dann bei der Ausgabe einer Kategorie geprüft werden, welchen Wert dieses Feld beim jeweiligen Beitrag hat. Je nach Einstellung würde der Beitrag in der Kategorieansicht angezeigt oder eben ausgeblendet. Der Beitrag selbst bliebe weiterhin öffentlich erreichbar, sofern er direkt über einen Menüpunkt aufgerufen wird.

    Wenn dagegen generell verhindert werden soll, dass eine bestimmte Kategorie als Liste oder Blog ausgegeben wird, wäre ein anderer Ansatz sinnvoller. In diesem Fall könnte man für diese Kategorie ein eigenes Layout beziehungsweise Override anlegen, das keine Beitragsliste ausgibt oder stattdessen eine definierte Meldung, Weiterleitung oder 404-Ausgabe erzeugt.

  • Vielen Dank.

    B) Ich vermute dann, dass keine CMS-Einstellung verfügbar ist, dann werden wir das vmtl. über Overrides lösen.

    A) Bzgl. der Ausführungen zur "Startseite", habe ich vielleicht zu unpräzise beschrieben, worin die Verwirrung besteht:

    STATUS QUO

    (1) Menü-Item: "startseite" (Template/Layout A) [als "Home" markiert]

    • "Articles > Features Articles"
      index.php?option=com_content&view=featured

    (2) Menü-Item: "kartegorienliste" (Template/Layout B)

    • "Articles » List All Categories in an Article Category Tree"
      index.php?option=com_content&view=categories&id=0 (Root-Kategorie)

    Soweit korrekt und erwartbares Verhalten.

    Wenn man nun ohne Menü-Item den folgenden Direktlink aufruft, wird jedoch eine Kategorienliste (Root) auf der Startseite (in der component area) angezeigt:

    • Direktlink Kategorienliste:
      index.php?option=com_content&view=categories


    Ich vermute, dass dies ein Bug von Joomla ist, denn in meinem Verständnis würden beim Routing von Joomla ja zunächst Menü-Einträge präferiert gematcht und dann entsprechend auf den Menüeintrag geleitet. Dass auf die Startseite weitergeleitet wird, wäre soweit ich das verstehe nur das "Fallback" Verhalten.

    Die Frage ist daher:

    • Warum matcht der o.g. Direktlink nicht den Menüeintrag?

      bzw.
    • Warum leitet Joomla hier auf "Home" weiter und zeigt dort den Inhalt der Komponente an?
      (Das ist für mich hier bspw. nicht beeinflussbar, da ich keinen Menüeintrag anlegen kann, der offenbar diese Route matcht, zumindest wüsste ich ad hoc nicht welchen).


    EDIT:
    Ich habe nun ein paar Menüexperimente durchgeführt.

    Folgendes leitet korrekt auf den Menüeintrag weiter, womit m.E. der Bug bestätigt wäre
    /component/content/categories?id=0

    d.h. es gibt einen Fehler beim Routing von ROOT Categories.
    Bei Menüeinträgen wird standardmäßig für die ROOT Category der Parameter id=0 angehängt
    Das Default Rooting /component/content/categories zeigt ebenfalls die ROOT Category, leitet jedoch nicht auf den Menüeintrag der ROOT Category weiter (da der Paramter id=0 fehlt).

  • denn in meinem Verständnis würden beim Routing von Joomla ja zunächst Menü-Einträge präferiert gematcht und dann entsprechend auf den Menüeintrag geleitet.

    Da ist dein Verständnis falsch: Die Zuordnung von Direktlinks zu Menüeinträgen erfolgt über den ItemId Query Parameter, wenn der nicht gesetzt ist, wird die Itemid der Startseite als Fallback verwendet.

  • Mein Test bestätigt das unerwartete Routing in J 6.1

    • /component/content/categories?id=0 => zeigt Root Category Tree, matcht den Menüeintrag, leitet korrekt auf SEF Route weiter
    • /component/content/categories => zeigt Root Category Tree, matcht jedoch (entgegen den Erwartungen) nicht den Menüeintrag

    Das ist m.E. nicht erwartet/erwartbar und ein Routing-Fehler, da für die Route "/component/content/categories" (ohne ID Parameter) somit niemals ein Menüeintrag matchen kann (außer per SQL Modifikation)

  • Und es gibt noch etwas, worüber ich mich beim Routing von Joomla wundere:

    Vermutungen:

    • Ich vermute, dass viele Joomla Installationen die "Zugriffsberechtigung" über Menüeinträge => "Access" steuern.
      Das heißt sie setzen "Access" bei ihren Menüeinträgen, um Zugriff auf bestimmte Routen/Seiten zu steuern.
    • Ich vermute, dass sie sich nicht darüber im Klaren sind, dass damit nur der Zugriff auf den jeweiligen Menüeintrag gesteuert wird und die Routen per Direktlinks dennoch verfügbar sind.

    Beispiel:
    Menüeintrag "Articles » List All Categories in an Article Category Tree"
    index.php?option=com_content&view=categories&id=0 (Root-Kategorie) bekommt "Access" "Super Users".

    Jetzt könnte man (fälschlich) annehmen, dass somit Root Kategorien nur mit dem Access Level angezeigt werden.

    Das ist jedoch nicht der Fall, denn mit dem Direktlink können die Kategorien ja nach wie vor auch ohne das Access Level angezeigt werden. Nur der SEF-Redirect auf die Menüeintragsroute funktioniert dann nur noch für das jeweilige Access Level.

    Ist dieses Konzept von Joomla wirklich so gedacht?

    Wenn ja, wie würde man "korrekt" bspw. den Zugriff per Access Level auf bestimmte Routen steuern?
    Vermutlich nur auf der nächsten Ebene (bspw. Access bei Categories oder Articles)
    Oder schlussendlich nur durch additive Checks und/oder Overrides in den Komponenten im Zweifel.

    Ist das wirklich etwas, was die Nutzer des CMS so erwarten (würden)?

  • ...Das ist m.E. nicht erwartet/erwartbar und ein Routing-Fehler...

    Nein, das ist kein Fehler. Weil:

    Die Zuordnung von Direktlinks zu Menüeinträgen erfolgt über den ItemId Query Parameter, wenn der nicht gesetzt ist, wird die Itemid der Startseite als Fallback verwendet.

    Bei Joomla wird sehr viel über die Menüeinträge gesteuert und festgelegt. Wenn Joomla keinen eindeutigen Menüeintrag per url erhält wird die Website mit den Einstellungen/Festlegungen des Startseiten-Menüeintrages ausgegeben!

  • Wenn Beiträge nicht in Access(Zugriffsebene) Public oder Guest sind werden sie auch nicht öffentlich ausgegeben.

    Ebenso gilt dies z.B. auch für die Menüeinträge die nicht in Access(Zugriffsebene) Public oder Guest sind.

    Daher verwendet man normalerweise Menüeinträge um die gewünschten "Routen" zu erstellen.

    Die entsprechenden Direktlinks führen dann gegebenenfalls zu:

    Zitat

    Bitte zuerst anmelden.

    Interner Mitgliederbereich Bitte melden Sie sich mit Ihren persönlichen Zugangsdaten an, um interne Inhalte einzusehen.

    Dir fehlt offensichtlich noch viel Grundlagenwissen bezüglich Joomla.

    Siehe z.B. auch:

    openbook.rheinwerk-verlag.de/joomla_3/index.html

    Ist zwar Joomla 3, aber die Grundlagen gelten weiterhin.