最初のブロックタイプからエントリのリストを読み込み、最初のアセットのみを読み込みます

私は熱望したいと思います:

  1. エントリのリスト
  2. エントリーループの中で、最初の画像を、マトリックスフィールドのブロックタイプの最初から表示します。

このようなエントリを読み込む

{% set entries = craft.entries({
  sectionId: 12,
  with: [
    'pageContent.text:text',
    ['pageContent.images:images', {
      withTransforms: [{
        width: 100,
        height: 100
      }]
    }]
  ]
}) %}

画像を読み込む:

現在のところ、私はこのようなイメージを読み込むことしかできません:

{% for block in entry.pageContent %}
  {% if block.type == 'images' %}
    {% if img is not defined %}
      {% set img = block.images[0] ?? null %}

  {% endif %}
{% endfor %}```

私はあなたが行列を正常に取得するとき、私はちょうど一連のエラーを受け取ることができますように、私は何かのようなものをしようとしているように、

{% set img = entry.content.type('images').first.images[0] ?? null %}

さらに、ループを使用して変数を保存することはできませんが、これは意図的なものであり、どのようにして読み込みがうまくいくかを推測しています。もしそうであれば、私が必要としないブロック上でループしているなら、クエリの最適化によってもメリットがありますか?一例として、私は通常、

{% set img = entry.content.type('images').first.images.first ?? null %}

これが価値があるかどうかを確認してから、この行列のテキストフィールドを(ブロックタイプの最初から)もう一度取得したいが、テンプレートの別の位置に置いておきたい。つまり、別のフィールドのデータを取得するためにもう一度ループを繰り返す必要がありますか?

これに対処するより良い方法はありますか?

私はそれが意味をなさないことを願っています、私が明確にするために全力を尽くすかどうかわからない場合はお知らせください

ベストアンサー

また、ループを使用して変数を保存して、変数を外部で使用することはできないようです。

これは本当に別の質問です。とにかくそれに答える:あなたは、ループの前に変数を与える必要があり、それが動作します:

{% set img = null %} {# initial value #}

{% for block in entry.pageContent %}
  {% if block.type == 'images' %}
    {% if not img %}
      {% set img = block.images[0] ?? null %}
    {% endif %}
  {% endif %}
{% endfor %}

{# img will be the first image of first 'images' block, or null #}

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です