web-dev-qa-db-fra.com

Le menu personnalisé obtient le titre de l'élément parent du menu actif

Je peux obtenir le titre du menu actif en utilisant

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

Mais comment puis-je accéder à son titre parent?

7
web-tiki

Essayez ce code:

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

Si vous avez besoin du lien

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

La méthode getActive renvoie un objet avec les propriétés du menu actif, y compris le parent_id. La classe JMenu a une méthode getItem ($ id), où $ id est un id de menu. Cette méthode retourne le même type d'objet que getActive. Donc, vous pouvez faire quelque chose comme ça:

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

Puisque vous pouvez obtenir le menu actif, vous pouvez obtenir le reste en récupérant le tree. Ceci est utile pour parcourir la liste des articles, pas seulement le parent!

Pour que vous compreniez mieux, je divise la réponse en plusieurs parties:

1. Créez une variable pour le menu actif (pour la simplicité et la portabilité):

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

2. Choisissez le menu précédent/parent en récupérant l’élément précédent dans l’arborescence:

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

NOTE: le tree est un tableau, et commence par zéro, c'est pourquoi je soustrais par 2.

3. Enfin, obtenez le titre du menu:

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

Notez que vous devez également ajouter des contrôles pour voir s’il existe un menu actif et/ou d’autres contrôles d’erreur.

1
jackJoe