web-dev-qa-db-ja.com

単一のメニュー項目からの同じコンポーネントの異なるビューの異なるメニューモジュール

2つのビューを持つコンポーネントを作成しました。

クライアントから、詳細ページに異なるメニューを表示するように依頼されました。

詳細ページを指す新しいメニューアイテムと、メインページで正しいItemidを設定するパラメーターを作成してみましたが、正しく取得されますが、2番目のメニューエイリアスがURLに追加されます https: //example.com/second-menu-item-alias/somealias

自分ができるということがわかっている:

  • テンプレートを変更し、2つの位置を作成して、入力パラメーターに従ってそれぞれを表示します。
  • メニューモジュールをオーバーライドして、必要なロジックをそこに追加します。
  • nonumberやその他の拡張機能を使用して処理します。

しかし、それらに頼る前に、自分のコンポーネントから使用できるソリューションがあるかどうかを本当に知りたいと思います。

ありがとうございました。

2
Riccardo Zorn

解決策は信じられないほど簡単であることがわかりました。パラメーターをメインビューに追加し、2番目のメニュー項目のItemidを非表示にして、代替モジュールレイアウトを構成しました。

次に、詳細ページのレイアウトに私は単に追加しました:

$set_itemid = $this->params->get('set_itemid',0);
if ($set_itemid) {
    $app = JFactory::getApplication();
    $app->input->set('Itemid',$set_itemid);
}

したがって、私は自分のレイアウトを構築した正しいパラメーターでItemidパラメーターを上書きしています。他のItemidを含むページが直接使用されることはありません。私はJoomlaをだますだけです!そのページのモジュールをレンダリングする必要があると考えて。

これが機能するのは、コンポーネントをレンダリングするときに、コンポーネントのURLが既にデコードされているためです(そのため、ここで問題が発生することはありません)が、モジュールを引き続きレンダリングする必要があります。

これがサードパーティのキャッシュマネージャーやSEF製品で動作するかどうかはわかりませんが、基本的なJoomla 3.8ルーティングとキャッシュでは、問題なく動作するようです。

0
Riccardo Zorn

はい、あなたはコードに多くの変更を加えることなくそれを行うことができます

JHTML::_('content.prepare', '{loadposition mycustom-top}')

モジュールに移動し、ここでレンダリングするモジュールで、位置をmycustom-topに設定します

この位置のオプションは表示されませんが、位置のテキストフィールドに位置を入力してEnterキーを押します。

お役に立てれば。問題がございましたら、コメントを投稿してください。

0
Pratyush