2019-06-30

Craft CMS の Matrix フィールドで特定のフィールドの値が一致するエントリをループで取得する #craftcms

この2つのエントリの続きみたいなものなのですが。

対象のセクションやらフィールドやら。

セクション : case
caseセクションのフィールド : case 種類は Matrix
Matrixのブロック名 : case
caseブロックのうち判定に使いたいフィールド : case_open 種類は LightSwitch

caseセクションのエントリをループで取り出すのだけど、そのときに case_open が有効(1)のものだけを取り出したいな、と。

@BUN にやり方をきいて、結果としてはこんなかんじで無事やりたいことができた。

{# caseセクションのベースクエリをセット #}
{% set query = craft.entries.section('case') %}

{# エントリを取り出す #}
{% for entry in query.all() %}

{# エントリのうち case_open が有効なものを取り出す #}
  {% for block in entry.case.case_open(1).all()  %}
    {{block.case_url}}
  {% endfor %}
{% endfor %}

全然わかってないだけなんだけど

{% set query = craft.entries.section('case') %}

ってやった後は

{% for block in query.case.case_open(1).all()  %}

とかで取れないのかな、という気がしてしまった。

なんとなく、最初の

{# caseセクションのベースクエリをセット #}
{% set query = craft.entries.section('case') %}

{# エントリを取り出す #}
{% for entry in query.all() %}

このエントリを取り出してるところの処理がどうにも重くなったりしないのかなぁと思ってしまったりするんだけど、単にわかってないだけだな。

@BUN@tinybeans にまたきいてみよ。