2つのビューを持つコンポーネントを作成しました。
クライアントから、詳細ページに異なるメニューを表示するように依頼されました。
詳細ページを指す新しいメニューアイテムと、メインページで正しいItemidを設定するパラメーターを作成してみましたが、正しく取得されますが、2番目のメニューエイリアスがURLに追加されます https: //example.com/second-menu-item-alias/somealias 。
自分ができるということがわかっている:
しかし、それらに頼る前に、自分のコンポーネントから使用できるソリューションがあるかどうかを本当に知りたいと思います。
ありがとうございました。
解決策は信じられないほど簡単であることがわかりました。パラメーターをメインビューに追加し、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ルーティングとキャッシュでは、問題なく動作するようです。
はい、あなたはコードに多くの変更を加えることなくそれを行うことができます
JHTML::_('content.prepare', '{loadposition mycustom-top}')
モジュールに移動し、ここでレンダリングするモジュールで、位置をmycustom-topに設定します
注この位置のオプションは表示されませんが、位置のテキストフィールドに位置を入力してEnterキーを押します。
お役に立てれば。問題がございましたら、コメントを投稿してください。