0

Codeigniter から来て、Expression Engine を初めて使用する私は、exp:channel:entries タグで複雑なフィルターを実行する方法に途方に暮れています。

このフィルターに興味があります

status
start_on
stop_before

このような複雑な条件のフィルターをどのように実装しますか?

(status=X|Y|Z AND start_on=A AND stop_before=B) OR (status=X AND start_on=C AND stop_before=D)

これは可能ですか?

4

3 に答える 3

1

残念ながら、このパラメーターを使用しsearch=て検索できるのは、「テキスト入力」、「テキストエリア」、および「ドロップダウン リスト」フィールドのみです。したがって、これには query モジュールを使用する必要があります。

exp_channel_titlesこれらのパラメーターに対してクエリを実行するだけの場合は、テーブルから必要なエントリ ID を取得できるはずです。その後、 Stashプラグインなどを使用entry_idして、結果の を通常のチャネル エントリ タグにフィードします。はい、名目上はそのようにもう 1 つのクエリですが、EE は db スキーマをかなり重く抽象化するため、代わりの方法はJOINs の混乱で失われることです。

したがって、(疑似コード、そのままでは機能しません)のようなもの:

エントリを取得します。ステータスは exp_channel_titles の単なる文字列です。これは必要な日付列です。これは UNIX タイムスタンプとして保存されるため、フィルター データの形式に応じてentry_date選択する必要があります。DATE( FROM_UNIXTIME(entry_date))

{exp:stash:set name="filtered_ids"}{exp:query sql="SELECT entry_id
              FROM exp_channel_titles 
              WHERE status LIKE ...<your filter here>"
            backspace="1"
              }{entry_id}|{/exp:query}{/exp:stash:set}

テンプレートの後半:

{exp:channel:entries
  entry_id="{exp:stash:get name="filtered_ids"}" 
}
  {!--loop --}
{/exp:channel:entries}

はい、おそらく純粋な CI で慣れ親しんでいるものと比べると混乱していますが、トレードオフは、EE から無料で入手できるすべてのもの (CP、テンプレート作成、メンバー管理など) です。

ちなみに Stash は素晴らしいです - ほとんどの EE パフォーマンスの問題を大幅に軽減したり、解析順序の問題を回避したりするために使用できます

于 2012-10-05T09:59:49.983 に答える
0

ループ内のsearch=パラメーターを使用して、この機能の多くを取得できます。{exp:channel:entries...}

求める複雑さをどのように取得するかはすぐにはわかりません。そのため、最終的にはそれに頼ることになるかもしれませんquery module

于 2012-10-04T11:22:12.507 に答える
0

日付を扱っている場合は、DT プラグインが役立つことがあります。

于 2012-10-23T23:33:42.280 に答える