web-dev-qa-db-ja.com

新しいメニュータイプの作成、フィールドの定義、metadata.xml

カスタムのcom_tags/tagsレイアウトを作成したいのですが、メニュー項目のparent_idフィールドを保持する必要があります。

私がやったことは作成です:

/templates/mytemplate/html/com_tags/tags/species.php
/templates/mytemplate/html/com_tags/tags/species.xml (copied from administrator/components/tags/config.xml)

これにより、メニュータイプポップアップに「種」エントリが表示されますが、カスタマイズフィールドはありません。 「すべてのタグのリスト」エントリにあるparent_idフィールドが必要です。

私はコードをデバッグしました、そして明らかに私は必要です

/templates/mytemplate/html/com_tags/metadata.xml

ある種の「メニュー」エントリを含める必要があるようです。これがどのようにフォーマットされるべきかの例を見つけることができません。

これは、Akeebaバックアップからのサンプルファイルです https://github.com/akeeba/contactus/blob/master/component/frontend/views/item/metadata.xml しかし、追加する方法がわかりませんここにオプションがありますか?

1
jdog

私の質問を理解した場合、com_tagsコンポーネントのカスタムメニュータイプを作成しようとしていて、メニューマネージャーでメニュー項目を作成するときにメニュー項目のIDを設定する必要があります。

その場合は、config.xmlをコピーしないでください。

あなたはコピーする必要があります

joomlaRoot/components/com_tags/views/tags/default.xml 

これには、親IDのフィールドと、それに定義されたパラメータがあります。

Joomlaがこれが別のレイアウトであることを認識できるように、名前を種.xmlに変更し、タイトル/オプションテキストを変更してください。

これがお役に立てば幸いです。

1
Mathew Lenning

私が正しく理解している場合、別のオプションがあります。それは、ある種のオーバーライドなしでは達成するのが難しい通常の方法を「無視」し、オーバーライドがphpファイルであることを使用して、情報を個別に取得することです。

ItemidをURLで取得してJRouteに渡す方法

ここでの私の答えは、メニューアイテムIDを取得して特定のページへのリンクを作成するための次のことを示しています。

_$app = JFactory::getApplication(); 
$menu = $app->getMenu();
$menuItem = $menu->getItems( 'link', 'index.php?option=com_example&view=something', true );
echo JRoute::_('index.php?Itemid='.$menuItem->id);
_

この場合、_$menuItem_は実際にはそのメニュー項目に関する情報を含むオブジェクトです。

そう.....

_$app = JFactory::getApplication(); 
$menu = $app->getMenu();
$menuItem = $menu->getItems( 'link', 'index.php?option=com_example&view=something', true );
echo JRoute::_('index.php?Itemid='.$menuItem->parent_id);
_

親メニュー項目へのリンクを取得する必要があります。

ただし、現在のメニュー項目だけが必要な場合があるため、次の行を調整します。

_$menuItem = $menu->getItems( 'link', 'index.php?option=com_example&view=something', true );
_

に:

_$menuItem = $menu->getActive();
_

現在のページの親のリンクのみを取得できるはずです。実験すると、これをさらに進めることができます。$menu->getItems()には、使用できるオプションがたくさんあります(ただし、適切なドキュメントページを見つけることができませんでした)。

1
Jordan Ramstad