web-dev-qa-db-ja.com

JRouteはデフォルトでメニューリンク(SEF)へのパスを見つけますか

Joomlaで理解できることは、特定のビューのメニューを作成するまでは、次のようにそのビューへのコンポーネントリンクが取得されるということです。

component/component_name/location/new-york (ex #1)

このビューのリンクを作成すると、次のように、メニューエイリアス+ビュー+アイテム名またはIDに変換されます。

/locations/location/new-york (ex #2)

ただし、これを実行しても、例1のように古いリンクがまだ取得されています。リンクにItemidを追加すると、例2のように期待どおりの結果が得られますが、以下の意味を参照してください。

JRoute::_('index.php?option=com_modern_tours&view=location&alias=' . $asset->alias .'&Itemid=138');これはこれに変換されます_/locations/location/new-york_

でもこれは

JRoute::_('index.php?option=com_modern_tours&view=location&alias=' . $asset->alias);これはこれに変換されます_component/component_name/location/new-york_

この場合、メニューを検索して不足しているitemidを追加するための追加の関数を作成する必要があるようです。これが実際にどのように機能するか、またはJoomla自体がこれを理解する必要があるかどうかはわかりませんが?誰かがこれを説明してくれませんか

2
user1876234

JRoute::_()は何も見つかりません。非SEFリンクをSEFに変換するだけです。その方法は、コンポーネントのルーターによって異なります。コンポーネントが最新のルーティング(3.7で導入されたと思います)を実装していない限り、Itemidを見つける必要があります。

最新のルーティングの前は、各Joomlaコアコンポーネントは独自のルートヘルパークラスを使用してメニュー項目を検索し、IDを見つけて非SEF URLに追加していました。最新のルーティングでは、これがルールセットの一部として含まれているため、コンポーネントごとにこれを記述する必要はありません。

1
Sharky