Ich habe ein Menüelement für eine bestimmte Ansicht in einer benutzerdefinierten Komponente. An diesen Menüpunkt habe ich eine andere Template Style
ausgewählt, nicht die Standardvorlage. Der Zugriff auf die Ansicht über das Menü funktioniert gut, da es an die URL der anhängt Itemid
.
Jetzt möchte ich mit JRoute eine Ansicht mit einer anderen verknüpfen, JRoute generiert jedoch nicht die gewünschte URL.
echo JRoute::_('index.php?option=com_example&view=reporting');
/index.php?option=com_example&view=reporting
JRoute
Die Itemid wird nicht an die URL angehängt, wodurch der ausgewählte Vorlagenstil für das Menüelement nicht funktioniert.
Gibt es eine Möglichkeit, die Itemid zu "berechnen" (abgesehen von einer Abfrage in der Tabelle jos_menu
in der Spalte link
) und an JRoute anzuhängen?
quelle
Antworten:
Hier ist eine Technik, die ich benutzt habe (ich kann mich nicht erinnern, wo ich sie gefunden habe).
Das hat Wunder für mich gewirkt.
quelle
Die Ausgabe von JRoute hängt davon ab, was Sie füttern.
könnte etwas anderes zurückgeben als
In der Tat, wenn Sie eine Blog-Auflistung der Menüelementkategorie für catid = 5 haben, kann diese Ihnen die Menü-URL geben (ich habe diese exakte URL nicht getestet). Versuche es mit verschiedenen get-Parametern, um unterschiedliche Ergebnisse zu erhalten (manchmal sehr falsch, wie @Fedik sagte)
quelle
Der Schlüssel hier ist die Einrichtung Ihrer Komponente router.php-Datei (die sich im Stammverzeichnis Ihrer Komponente im Front-End befindet) mit Logik, die nach dem entsprechenden Menüpunkt sucht und diesen auswählt. Ich würde gerne sehen, dass dies automatisch geschieht, aber soweit ich weiß, ist dies nicht der Fall.
Es ist wahrscheinlich am besten, diesen Codeblock in eine Art Hilfsfunktion einzuarbeiten, mit der automatisch das am besten passende Menüelement für den Inhalt gefunden werden kann.
Hier ist der Code, den ich in einigen meiner benutzerdefinierten Komponenten verwendet habe, um das am besten passende Menüelement zu erhalten:
All dies ist eine Art Chaos (und ich würde Verbesserungen lieben, wenn jemand sie hat!), Aber es wird die Arbeit erledigt. Wenn der aktuelle Menüpunkt der beste ist, bleibt er immer dabei.
Andernfalls sollte die beste Übereinstimmung basierend auf Komponentenname -> Ansichtsname -> Layoutname -> ID-Wert gefunden werden. Je weiter rechts es passt, desto besser finde ich das Spiel!
quelle
Afaik JRoute übernimmt die aktive
Itemid
(und auch die aktiveoption
), wenn keine bereitgestellt wird. Wenn dies nicht funktioniert, bedeutet dies, dass der Aufruf Ihres Codes zunächst ohne Itemid erfolgt. In diesem Fall ist es am einfachsten, die Itemid zum Anfangsaufruf hinzuzufügen.Wenn Sie den Menüpunkt nachschlagen müssen, würde ich keine direkte Abfrage durchführen, sondern stattdessen JMenu verwenden.
quelle
JRoute::_('index.php?option=com_example&view=reporting&Itemid=10')
JRouter zurückgegeben werden kann/current-path?view=reporting&Itemid=10
... Gibt es bestimmte Dinge?