いくつかの内部条件に基づいて、リストをフィルター処理し、フィルターリストで選択した項目を表示する「検索ツール」を有効にする必要があります。必要な最終的な効果は、このようにURLにフィルターを追加するのと同じですhttp:...&Itemid=161&filter[parent_id]=29
、私がやりたいことを正確に行います。
ユーザー状態変数を設定するには2つの方法があります。 1つ目はかなり直感的で、JApplication :: setUserStateメソッドを使用して行われます。もう1つは少しわかりにくく、JApplication :: getUserStateFromRequestメソッドを使用します。ユーザー状態変数を取得する方法も2つあります。 1つ目はJApplication :: getUserStateメソッドを使用する方法で、2つ目はJApplication :: getUserStateFromRequestメソッドを使用する方法です。 JApplication :: getUserStateFromRequestは、ユーザー状態変数の保存と取得の両方に使用できます。
これは情報を取得するのに十分ですが、方法と状態変数を設定して、上記のURLが行うことを実行するための状態変数を設定して、すべてのパーツと部分が、仕方。
私はいくつかの場所でこのコードのバリエーションを試しましたが、通常は出力をフィルターに掛けることができますが、検索ツールを表示させることができないため、->getUserStateFromRequest
およびその他の後続の関数が使用します。
// Load the filter state.
$search = $app->getUserStateFromRequest($this->context.'.filter.search', 'filter_search');
$this->setState('filter.search', preg_replace('/\s+/',' ', $search));
コードには次のようなループがあります-どのように$app->getUserStateFromRequest
はループするフィルタとして「取得」しますか?
if ($filters = $app->getUserStateFromRequest($this->context . '.filter', 'filter', array(), 'array')) {
foreach ($filters as $name => $value) {
$this->setState('filter.' . $name, $value);
}
}
ビュークラスのdisplay
メソッド内で、この行をparent::display($tpl);
の前に置きます。
$this->get('State')->filter = array('Foo'=>'Bar');
私は常にこの行を使用して、コンポーネント内のfeatured
アイテムをフィルタリングします。
$this->get('State')->{'filter.featured'} = 1;
それが役に立てば幸い。