Benutzerdefiniertes Menü ruft den Titel des übergeordneten Elements des aktiven Menüs ab


7

Ich kann den Titel des aktiven Menüs mit abrufen

$menu = &Jsite::getMenu();
$menuname = $menu->getActive()->title;

Aber wie kann ich auf den übergeordneten Titel zugreifen?

Antworten:


10

Versuchen Sie diesen Code:

$menu = JFactory::getApplication()->getMenu();
$parent = $menu->getItem( $menu->getActive()->parent_id );
$parentname = $parent->title

Wenn Sie den Link benötigen

$parentlink = JRoute::_( $parent->link . '&Itemid=' . $parent->id );

Während diese Antwort richtig ist, sollten Sie den Rückgabewert von getActive () überprüfen, da es möglicherweise kein aktives Menü gibt und Sie ein Nicht-Objekt zurückbekommen (ich denke null)
Harald Leithner

1

Die Methode getActive gibt ein Objekt mit den aktiven Menüeigenschaften einschließlich der parent_id zurück. Die JMenu-Klasse verfügt über eine Methode getItem ($ id), wobei $ id eine Menü-ID ist. Diese Methode gibt denselben Objekttyp zurück wie getActive. Sie können also so etwas tun:

$menu = JFactory::getApplication()->getMenu();
$parent_id = $menu->getActive()->parent_id;
$parent_title = $menu->getItem($parent_id)->title;

1

Da Sie das aktive Menü erhalten können, können Sie den Rest erhalten, indem Sie das erhalten tree. Dies ist nützlich, um die Artikelliste zu durchlaufen, nicht nur die übergeordnete!

Damit Sie es besser verstehen, teile ich die Antwort in Teile auf:

1. Erstellen Sie eine Variable für das aktive Menü (der Einfachheit und Portabilität halber):

$menu = &JSite::getMenu();
$active = $menu->getActive();

2. Wählen Sie das vorherige / übergeordnete Menü aus, indem Sie das vorherige Element in der Baumstruktur abrufen:

$parent_item_id = $active->tree[count($active->tree) - 2];

HINWEIS: Das treeist ein Array und beginnt mit Null. Deshalb subtrahiere ich um 2.

3. Holen Sie sich schließlich den Menütitel:

$menu->getItem($parent_item_id)->title

Beachten Sie jedoch, dass Sie auch einige Überprüfungen hinzufügen müssen, um festzustellen, ob ein aktives Menü vorhanden ist, und / oder andere Fehlerprüfungen.


Sie sollten nicht verwenden $menu = &JSite::getMenu();, da es sich nicht um eine statische Funktion handelt. Der richtige Weg ist, den von @ me7hos angegebenen Code zu verwenden.
Don Gilbert
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.