Zugriff auf eine Variable aus einer Twig Loop heraus

Hallo, laut der Twig-Dokumentation sollte dies funktionieren, aber ich kann es nicht in der Shwopare 6-Vorlage zum Laufen bringen:

{% set temp2 = "" %}
{% for number1 in 1..100 %}
    {% set temp2 = context.context.extensions.PropertiesExtension1[number1] %}
{% endfor %}
{{ temp2 }}

Das Ergebnis ist nur der letzte [100] Key.

Aber es funktioniert wie folgt:

{% set temp2 = "" %}
{% for number1 in 1..100 %}
    {% set temp2 = context.context.extensions.PropertiesExtension1[number1] %}
{{ temp2 }}
{% endfor %}

Kann mir jemand helfen?

Weil du bei jeder Schlaufeniteration den Wert neu setzt kommt auch nur der letzte Wert raus.
Was möchtest du konkret herausbekommen?

1 Like

Oh, wirklich. Ich sollte etwas schlafen… Danke :slight_smile:
Ich muss eine String aus der Loop herausholen, die ich verwenden kann:

and k != "0046b0fe5bde48b2b1a3d3ff6126bb10" and k != "00d4d08cbb744d9ca94d92c42a2ab1b3" and k != "03532c02597a4d97913926bdbbff973f" and k != "03e62ce1518c4e18ab655909459a06dd" and k != "03ef7f5772924e5980a30c041dc92494" and k != “04c225dfa3e3453bb29e6e22cc3aa690"

Ich habe diesen Code. Ich habe keine funktionierende Möglichkeit gefunden, zusätzliche Quotes einzuschließen, also habe ich dafür Präfix- und Postfix-Variablen erstellt:

{% for property in properties.entities %}

  {% set prefix1 = ' and k != "' %}
  {% set postfix1 = '"' %}
  
  {% set temp2 = "" %}
  {% for number1 in 1..100 %}
      {% set temp2 = prefix1 ~context.context.extensions.PropertiesExtension1[number1] ~postfix1 %}
      {{ temp2 }}
  {% endfor %}

  {% set propertyoptionsA = property.options|filter((v, k) => k != temp1 ~temp2) %}

    {% sw_include '@Storefront/storefront/component/listing/filter/filter-property-select.html.twig' with {
        elements: propertyoptionsA,
        sidebar: sidebar,
        name: 'properties',
        displayName: property.translated.name,
        displayType: property.displayType,
        pluginSelector: 'filter-property-select',
        propertyName: property.translated.name
    } %}
{% endfor %}

Warum nicht einfach

property.options|filter((v, k) => k not in context.context.extensions.PropertiesExtension1)

2 Likes

Denn hier ist die Standard Shopware Struktur:

Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\AggregationResultCollection {#9773 ▼
  #elements: array:6 [▼
    "manufacturer" => Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\EntityResult {#10589 ▶}
    "price" => Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\StatsResult {#10595 ▶}
    "rating" => Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\MaxResult {#10596 ▶}
    "shipping-free" => Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\MaxResult {#9762 ▶}
    "active" => Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\MaxResult {#10598 ▶}
    "properties" => Shopware\Core\Framework\DataAbstractionLayer\Search\AggregationResult\Metric\EntityResult {#10592 ▼
      #entities: Shopware\Core\Content\Property\PropertyGroupCollection {#8932 ▼
        #elements: array:21 [▼
          0 => Shopware\Core\Content\Property\PropertyGroupEntity {#8928 ▼
            #name: "PropertyName"
            #displayType: "media"
            #sortingType: "alphanumeric"
            #description: "PropertyName"
            #position: 1
            #filterable: true
            #visibleOnProductDetailPage: true
            #options: Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionCollection {#8715 ▼
              #elements: array:14 [▼
                "b3ff2365c286422a90125fe84a8031f6" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#8883 ▶}
                "3f777000a2734deead391133cee3a6a9" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#12137 ▶}

Und das ist es, was ich mit Subscriber habe:

Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult {#13213 ▼
  #entity: "property_group_option"
  #total: 297
  #entities: Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionCollection {#9420 ▼
    #elements: array:297 [▼
      "001695276a734b7c9f4b60171e1de25f" => Shopware\Core\Content\Property\Aggregate\PropertyGroupOption\PropertyGroupOptionEntity {#9416 ▼
        #groupId: "2e03e57ed43942f8ace73424f4b7428b"
        #name: "Propertyname1"

Hier der Subscriber Code:

$propertyGroupOptionsData = $this->propertyGroupOptionsRepository->search($criteria1, $context);
$event->getContext()->addExtension('PropertiesXExtension', $propertyGroupOptionsData);

Weiß jemand, wie man es passend macht?

Kann vielleicht jemand einen Tipp geben?

Weiß jemand, wie ich Eigenschaften mit Optionen in einer Extension bekommen kann? Ich habe jetzt nur Optionen

Oder sollte es mit $collection über Extension.php gesetzt werden?