web-dev-qa-db-ja.com

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

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

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

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

7
web-tiki

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

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

リンクが必要な場合

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

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
csbenjamin

アクティブなメニューを取得できるので、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

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

1
jackJoe