web-dev-qa-db-ja.com

k2アイテムリンクからメニューアイテムIDを削除する方法

私のサイトには2つの異なるテンプレートがあります。それらをTcatとTitemと呼んでください。私のk2カテゴリビューページはTcatを使用しています。つまり、k2カテゴリビューページのメニュー項目はTcatに関連付けられています。 k2アイテムページでTitemを使用する必要があります。つまり、カテゴリビューページでアイテムリンクをクリックすると、このアイテムを表示する新しいページでTitemが使用されます。ただし、デフォルトでは、この新しいアイテムページはTcatを使用します。

これは、リンクのhrefに「itemid = xxx」パラメータがあるためです。私の知る限り、k2アイテムは_mysite.com/index.php?option=com_k2&view=item&id=10_のようなURLで開くことができます。この場合、URLにメニューアイテムIDがない場合、ページはデフォルトのテンプレートを使用します。ただし、Itemidパラメータが追加され、URLが_http://67.20.67.232/index.php?option=com_k2&view=item&id=10&Itemid=150_のように見える場合、ページは_#150_メニュー項目に関連付けられたテンプレートを使用します。問題は、カテゴリビューを_#150_メニュー項目に関連付けたため、このカテゴリのすべての項目のリンクには常にこの_Itemid=150_パラメータが含まれているようです。

私は常にk2で同様の問題に遭遇しています。私が考えることができる1つの回避策は、Itemidパラメータを排除するためにJavaScriptを使用することです。別のそれほど実用的ではない方法は、各項目をTitemに関連付けられているメニュー項目に関連付けることです...他に方法はありますか?多分PHPをハードコーディングすることによって?

さらに、k2テンプレートのphpファイルでは、リンクは_<?php echo $this->item->link ?>_のようなものによって生成されます。_$this->item_オブジェクトがどのように実行されるかを見つければ、ハードコードする方法を見つけることができると思います。しかし、私のPHP知識は非常に限られています。調査すると、_$this_が_k2ItemviewList_のインスタンスであることがわかった場合に限り、_com_k2/views/itemlist/view.html.php_ですが、このクラスにはメンバーが1つしかありません:function display($tpl = null)itemは見つかりません。私はPHPを学習してjoomlaを理解しようとしていますコアとk2コア、これが私がJavaScriptソリューションに満足していない理由です。_$this->item->link_の背後にあるコードを追跡する方法を説明できれば、それは私の学習に大いに役立ちます。どんなヒントも大歓迎です。事前に感謝します。

2
shenkwen

Itemidは、ターゲットを識別してメニュー構造をナビゲートするためのJoomlaルーターの重要な部分です。また、モジュールは特定のアイテムIDに関連付けられています。

Itemidがない場合、Joomlaは「すべて」のページに割り当てられたモジュールでデフォルトページをレンダリングします。

SEFをカスタマイズし、IDなしでURLを生成する方法を探している場合は、 SEF拡張 をインストールするだけです。

1
Anibal