web-dev-qa-db-ja.com

[com] BuildRoute(&$ query)関数が$ query ['view']メンバーを渡さずに呼び出されました

サイト側のコンポーネントを書いていて、ルーターに問題があります。私は1つのコンポーネントに2つのビューを持っていますが、どちらにもdefault.phpテンプレートとdefault.xmlが1つだけあり、各ビューのメニュータイプを定義します(たとえば、ビューを呼び出してみましょう(1)および(2))。また、サイトでオンになっているSEFです。

したがって、最初のビュー(1)はURLに依存しません。テキスト情報のみが表示されます。

2番目のビュー(2)もDBからのデータを示しています。新しいパラメーター(例:_&cityid=5_)を使用してユーザーを自分自身に渡し、他の種類のデータ(同じDBクエリですが、この例では'... WHERE (...) AND cityid="5"' )。

サイトに2つのページ(メニュー項目)があり、それぞれ最初(1)と2番目(2)のビューがあります。

しかし、Router.phpを書き始めたとき、[component]BuildRoute(&$query)関数のパラメーター$ queryに_$query['view']_メンバーが含まれていないことがわかりました。 'option'と 'Itemid'が含まれていますが、 'view'メンバーがないため、関数の結果に渡すことができません(そのため、_[component]ParseRoute_で同じ状況が発生します。 「view」パラメーター。Joomlaitに渡して正しいビューを表示することはできません(最初(1)または2番目(2)))。したがって、「view」パラメーターを忘れると、Joomlaはデフォルトのビューを表示します。これは、私の場合は最初(1)のビューですが、2番目(2)のビューにする必要があります(上記を参照)。

追伸実際、JRequest::getVar('view')は正しい値を返しますが、_$query_配列には渡されません。

追伸私がJoomlaを初めて使用するため、私が何か間違ったことをしているのかもしれません。次に、私が上で説明したモデルを実現するのを手伝ってください。

事前にTHX。

1
impulsgraw

BuildRoute関数は、渡される情報をすべて取得します。コンポーネントでURLをどのように作成していますか?このような?

$url = JRoute::_('index.php?option=com_mycomponent&view=myview&task=mytask&id=1');

上記の場合、ビューパラメータはurl構造で渡されるため、BuildRoute関数はビューパラメータの取得方法を認識しています。ビューパラメータを渡さないと、取得されません。

メニュー項目を使用してアクセスする場合は、メニュー項目のリンク値を確認してください。

一方、ParseRoute関数はその値をsef urlから取得します。例えば:

uRL:mywebsite.com/someslug/someother/1-idone.html

上記のURLには、someslug、someother、1-idoneの3つのパラメーターがあります。したがって、ParseRoute関数でそれらをどのように解析するかはあなた次第です。つまり、view/task/idまたはtask/view/id、またはコンポーネントがBuildRoute関数を使用してコンポーネントを生成している順序です。

上記のURL構造は単なる例であり、ベースラインではありません。ルートを構築し、逆の方法で解析する方法は、完全にあなた次第です。

Joomla 3以降を使用している場合のいくつかの提案。

  1. JRequest :: getVarを使用せず、代わりにJFactory :: getApplication()-> input-> get関数を使用してください。
1
Nagarjun