Eigenschaften / Properties im Template ausgeben

Moin!

Wenn eine Eigenschaft ein Bild besitzt, sollte zumindest die mediaId im ausgegebenen Objekt vorhanden sein. Mit der searchMedia Funktion solltet Ihr an das gesamte Media Objekt kommen:

Ich habe hier mein Beispiel von oben mit dem Code aus der Doku erweitert:

{# initial ID array #}
{%- set arrOptionMediaIds = [] -%}

{%- for group in page.product.sortedProperties -%}
  {%- for groupOption in group.getOptions|filter(groupOption => groupOption.mediaId) -%}
    {# merge IDs to a single array #}
    {%- set arrOptionMediaIds = arrOptionMediaIds|merge([groupOption.mediaId]) -%}
  {%- endfor -%}
{%- endfor -%}

{# do a single fetch from database #}
{% set mediaCollection = searchMedia(arrOptionMediaIds, context.context) %}

{% for group in page.product.sortedProperties %}
  <strong>{{ group.getName }}</strong>

  <ul>
    {% for groupOption in group.getOptions %}
      <li>
        <span>{{ groupOption.getName }}</span>

        {# get access to media of option #}
        {% set optionMedia = mediaCollection.get(groupOption.mediaId) %}

        <pre>
          {{ dump(optionMedia) }}
        </pre>
      </li>
    {% endfor %}
  </ul>
{% endfor %}

Der erste Loop holt die vorhandenen Media-IDs aus allen Eigenschaften des Produkts, während der zweite Loop lediglich für die Ausgabe verantwortlich ist. Dazwischen werden die Media-Daten aus der Datenbank geholt, anhand des Arrays, dass wir im ersten Loop gebildet haben.

Falls jemand eine elegantere Lösung kennt, als zwei mal das selbe Array zu durchlaufen, möge meine Antwort gerne ergänzen :slight_smile:

LG;LA

2 „Gefällt mir“