Stash Listを2つのカスタムフィールドでフィルタリングすることは可能ですか?

リストを取得してカスタムフィールドで注文していますが、一部のフィールドを除外して他のフィールドを含める必要があります。基本的にカスタムフィールドのparamによるEEの検索のケースですが、OR not ANDを使用していました。以前は、ネイティブEEとは異なりOR検索をサポートするMark CroxtonのSearch FieldsモジュールでStashを使用していませんでした。

私の質問は - 私はどのようにStashリストにこれを複製できますか? Stashで検索フィールドを使用することは可能ですか?私が今までに持っているものは、そうではないようです。

1

1 答え

EE はチャネルエントリタグパラメータとのORマッチングをサポートしています:

search:body="pickles|shoes"

それだけでは不十分な場合:

正規表現でStashリストをフィルタリングする

結果セットをリストとしてキャプチャするときは、独自のインデックス列を作成できます。インデックス列は、フィルタリングする値を連結します。

テンプレートを表示するたびに高価なchannel:entriesクエリを再実行する必要がないようにリストをキャッシュします。私は、インデックス列の区切り記号として '@'を使用しています:

{exp:stash:set_list name="cars" parse_tags="yes" limit="500" save="yes" scope="site" replace="no"}
    {exp:channel:entries channel="cars"}
        {stash:index}{marque}@{color}{/stash:index}
        {stash:marque}{marque}{stash:marque}
        {stash:color}{color}{stash:color}
        {stash:reg}{title}{/stash:reg}
    {/exp:channel:entries}
{/exp:stash:set_list}

{!-- get red OR blue AND volkswagen --}
{exp:stash:get_list name="cars" scope="site" match="#^(blue|red)@volkswagen$#" against="index"}
   {reg} 
{/exp:stash:get_list} {!-- get red OR volkswagen --} {exp:stash:get_list name="cars" scope="site" match="#^[email protected]|@volkswagen$#" against="index"} {reg}
{/exp:stash:get_list}

Caveat

チャネルエントリを持つ数百を超えるエントリを出力すると、メモリが高価になり、テンプレートを最初に表示してキャッシュを生成したときにクエリが実行されます。関連するエントリを取得するために独自の最適化されたクエリを作成することも、大きな結果セットをフィルタリングする場合は、優れた低検索

2
追加された
ああ、そうです。 stash list btwでsearch_fieldsをキャプチャしているときに、どのような問題がありますか?
追加された 著者 Chris Leon,
こんにちはマーク、とても素早く答えることに感謝します。私は最初の投稿で少し不明だったと思う、EEは2つの異なるフィールド間のORを許可していなかったということを意味していた。{exp:field1 = "= {segment_3}" search:field2 = "= {segment_3}" operator = "OR" channel = "scheduler_times" parse = "内向き"} '
追加された 著者 segovius,
それほど問題はありませんが、Search FieldsモジュールのようにORを使って2つの異なるカスタムフィールドで検索を複製する方法を考えることはできません。上記のbtwをありがとう私は今これを試してみるつもりです、私は実際には、オーバーヘッドはあまりにも悪いとは思わないので、私は実際には約10-20エントリをフィルタリングする必要があります。 PS:すべての編集を申し訳ありませんが、私が書いた前になぜそれが提出し続けているのか分かりません。
追加された 著者 segovius,