カスタムメニューはアクティブメニューの親アイテムのタイトルを取得します


7

を使用してアクティブなメニューのタイトルを取得できます

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

しかし、どうすれば親のタイトルにアクセスできますか?

回答:


10

このコードを試してください:

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

リンクが必要な場合

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

この答えは正しいですが、アクティブメニューがない可能性があり、非オブジェクトが返される(nullと思う)ため、getActive()の戻り値を確認する必要があります
Harald Leithner

1

getActiveメソッドは、parent_idを含むアクティブなメニュープロパティを持つオブジェクトを返します。JMenuクラスにはメソッドgetItem($ id)があり、$ idはメニューIDです。このメソッドは、getActiveと同じタイプのオブジェクトを返します。だから、あなたはこのようなことをすることができます:

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

1

アクティブなメニューを取得できるため、を取得することで残りを取得できますtree。これは、親だけでなく、アイテムリストをトラバースする場合にも役立ちます。

あなたがよりよく理解できるように、私は答えをいくつかに分けています:

1.アクティブなメニューの変数を作成します(簡素化と移植性のため):

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

2.ツリーの前のアイテムを取得して、前のメニューまたは親メニューを選択します。

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

注:これtreeは配列であり、ゼロから始まります。そのため、2を減算しています。

3.最後にメニュータイトルを取得します。

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

アクティブなメニューがあるかどうかを確認するためのチェックやその他のエラーチェックを追加する必要があることにも注意してください。


$menu = &JSite::getMenu();は静的関数ではないため、使用しないでください。正しい方法は、@ me7hosで指定されたコードを使用することです。
Don Gilbert
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.