Ausgabe von einzelnen Eigenschaften in der Kategorieübersicht

So, war gar nicht so kompliziert wie ich dachte Smile

Im Subscriber folgenden Event hinzufügen:

ProductEvents::PRODUCT_LOADED_EVENT => "onProductLoaded"

Die Methode sieht dann grob so aus:

public function onProductLoaded(EntityLoadedEvent $event): void
{
    if ( !($event->getContext()->getSource() instanceof \Shopware\Core\Framework\Api\Context\SalesChannelApiSource) ) {
        return;
    }

    foreach ($event->getEntities() as $productEntity) {
        /** @var SalesChannelProductEntity $productEntity */
        $properties = $productEntity->getProperties();
        $grouped = $properties->groupByPropertyGroups();
        $grouped->sortByPositions();
        $grouped->sortByConfig();
        $productEntity->setSortedProperties( $grouped );
    }
}

Damit ist dann sortedProperties gefüllt, sortiert nach Backendeinstellung und sauber gruppiert. Zur Ausgabe kann man ohne große Änderungen den Block aus page/product-detail/properties.html.twig nehmen. Ungefähr so:

    {# @var product \Shopware\Core\Content\Product\SalesChannel\SalesChannelProductEntity #}
    {% for group in product.sortedProperties %}
        
            {{ group.translated.name|e }}:
            
                {% apply spaceless %}
                    {% for option in group.options %}
                        {% set i = ( i | default(0) ) + 1 %}
                        {% if i > 1 %}, {% endif %}{{ option.translated.name|e }}
                    {% endfor %}
                {% endapply %}
            
        
    {% endfor %}

 Fertig!

 Beste Grüße,
 devnullroot

3 Likes