Products in productSlider und product_listing angleichen

Hallo,
In meinen block_product_listing habe ich verschiedene Ausgaben die ich gern auch in meinem productSlider nutzen würde. Z.B product.extensions.groups um eine Farbauswahl anzufügen oder product.manufacturer.translated.name um den Hersteller im Listing mit anzuzeigen. Leider sind im productSlider diese Felder nicht vorhanden.

Ich habe bereits gesehen dass die Elemente unterschiedlich belegt werden.
{% set element = block.slots.getSlot(‚productSlider‘) %}
{% set element = block.slots.getSlot(‚content‘) %}

Wie kann ich diese Ausgaben für den productSlider ergänzen bzw. wo und wie werden die slots belegt?

Danke für eure Hilfe!

Du musst leider in einem Plugin die Daten erweitern, da in den Slidern nicht die gleichen Daten befüllt sind wie im normalen Listing.

DEINPLUGIN\src\Resources\config\services.xml

<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

        <service id="DEINPLUGINNAMESPACE\Core\Content\Product\Cms\ExtendProductSliderCmsElementResolver">
            <argument type="service" id="Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver"/>
            <tag name="shopware.cms.data_resolver"/>
        </service>            

    </services>
</container>

Und dann eine Datei erstellen unter DEINPLUGIN\src\Core\Content\Product\Cms\ProductSliderCmsElementResolver.php

<?php declare(strict_types=1);

namespace DEINPLUGINNAMESPACE\Core\Content\Product\Cms;

use Shopware\Core\Content\Cms\Aggregate\CmsSlot\CmsSlotEntity;
use Shopware\Core\Content\Cms\DataResolver\Element\AbstractCmsElementResolver;
use Shopware\Core\Content\Product\Cms\ProductSliderCmsElementResolver;
use Shopware\Core\Content\Cms\DataResolver\Element\ElementDataCollection;
use Shopware\Core\Content\Cms\DataResolver\ResolverContext\ResolverContext;
use Shopware\Core\Content\Cms\DataResolver\CriteriaCollection;

class ExtendProductSliderCmsElementResolver extends AbstractCmsElementResolver
{
    /** @var ProductSliderCmsElementResolver $elementResolver */
    private $elementResolver;
    public function __construct(ProductSliderCmsElementResolver $elementResolver)
    {
        $this->elementResolver = $elementResolver;
    }
    public function getType(): string
    {
        return $this->elementResolver->getType();
    }
    public function collect(CmsSlotEntity $slot, ResolverContext $resolverContext): ?CriteriaCollection
    {
        $criteriaCollection = $this->elementResolver->collect($slot, $resolverContext);
        foreach ($criteriaCollection as $productCriteria) {
            foreach ($productCriteria as $criteria) {
                $criteria->addAssociation('properties.group');
                $criteria->addAssociation('manufacturer');
                $criteria->addAssociation('extensions.group');
                /** Hier alle Felder einfügen, die du da brauchst */
            }
        }
        return $criteriaCollection;
    }
    public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, ElementDataCollection $result): void
    {
        $this->elementResolver->enrich($slot, $resolverContext, $result);
    }
}

Hoffe ich konnte dir helfen.

Lg Alex

1 Like

Danke für deine Antwort!
Fehler:
Attempted to load class „ExtendProductSliderCmsElementResolver“ from namespace Theme\Core\Content\Product\Cms". Did you forget a „use“ statement for another namespace?

Ich habe daher die Datei in ExtendProductSliderCmsElementResolver.php umbenannt. Nun gibt es keinen Fehler mehr, aber die gewünschten Ausgaben im ProductSlider fehlen leider noch.

1 Like

OK. $criteria->addAssociation(‚manufacturer‘); funktioniert. Danke dafür!
Jetzt fehlt noch $criteria->addAssociation(‚extensions.groups‘);

1 Like

Das funktioniert wie gesagt leider noch nicht. Hast du bitte noch einen Tipp woran das liegt?

Also. Ich habe inzwischen herausgefunden, dass die groups in den extensions für die Listings durch ein Plugin erzeugt werden (SasVariantSwitch). Jetzt muss ich diese noch in die ExtendProductSliderCmsElementResolver.php integrieren, so dass ich unter product.extensions.groups die verfügbaren Eigenschaften eines Produktes im Produktslider angezeigt bekomme.
Weiß jemand Rat?

Hallo,

das war eigentlich nur ein Schuss ins Blaue von mir. Extensions sind ja eigentlich Felder, die von einem Plugin befüllt werden, das hast du schon gut erkannt. Ich bin leider selbst eher Anfänger, was Symfony und Shopware Plugins betrifft, deshalb weiß ich nicht, wie man bestehende Plugins erweitert. Da müsste sich en Experte einklinken.

Um welche Daten handelt es sich da denn genau? Die Farben der Varianten?

Lg

Genau. Es geht um die möglichen Farben.
Ich habe das Problem jetzt einfach umschifft, indem ich eine einfaches Listing nutze (da funktioniert ja alles) und über eine Klasse dieses Listing in einen Slider umwandel. Mit dem Resolver-Thema muss ich mich nochmal in Ruhe befassen.
Nochmals Danke für deine Zeit!