リストを取得してカスタムフィールドで注文していますが、一部のフィールドを除外して他のフィールドを含める必要があります。基本的にカスタムフィールドのparamによるEEの検索のケースですが、OR not ANDを使用していました。以前は、ネイティブEEとは異なりOR検索をサポートするMark CroxtonのSearch FieldsモジュールでStashを使用していませんでした。
私の質問は - 私はどのようにStashリストにこれを複製できますか? Stashで検索フィールドを使用することは可能ですか?私が今までに持っているものは、そうではないようです。
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
チャネルエントリを持つ数百を超えるエントリを出力すると、メモリが高価になり、テンプレートを最初に表示してキャッシュを生成したときにクエリが実行されます。関連するエントリを取得するために独自の最適化されたクエリを作成することも、大きな結果セットをフィルタリングする場合は、優れた低検索。