web-dev-qa-db-ja.com

PHPを使用して、検索ツールのリストアイテムをクリックしたかのようにリストをフィルタリングする方法を教えてください。

いくつかの内部条件に基づいて、リストをフィルター処理し、フィルターリストで選択した項目を表示する「検索ツール」を有効にする必要があります。必要な最終的な効果は、このように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);
    }
}
3
GDP

ビュークラスのdisplayメソッド内で、この行をparent::display($tpl);の前に置きます。

$this->get('State')->filter = array('Foo'=>'Bar');

私は常にこの行を使用して、コンポーネント内のfeaturedアイテムをフィルタリングします。

$this->get('State')->{'filter.featured'} = 1;

それが役に立てば幸い。

2
Farahmand