Produktlisting erweitern um Hersteller [SOLVED]

Hallo,

hat jemand nen Tipp wie ich den Hersteller im Produktlisting bei jedem Produkt mit anzeigen kann? Welches Event brauch ich dafür denn und wie mach ichs am besten?

im Standard ist der Hersteller ja nicht dabei…

ingteressanter Weise hat Shopware 6 im Standard aber eine Brand-Itemprop im Listing (Product-Card) enthalten

{% block component_product_box_rich_snippets_brand %}
        
    {% endblock %}

aber is natürlich leer… weiß nicht was das soll

okay habs wohl gefunden.

einen Subscriber erstellen und auf dieses Event subscriben:

ProductEvents::PRODUCT_LOADED_EVENT => "onProductLoaded"

wusste anfangs nicht, dass man für das Listing auch das “ProductLoaded” braucht.

Hallo @FloC3‍,

ich versuche auch gerade, den Hersteller in meinem Produktlisting auszugeben, schaffe es aber leider auch mit deinem Hinweis auf das passende Event nicht.

Könntest du vielleicht posten, wie dein kompletter Subscriber aussieht?

Viele Grüße
finsti

public static function getSubscribedEvents(): array
    {
        return [
            ProductEvents::PRODUCT_LOADED_EVENT => "onProductLoaded"
        ];
    }

public function onProductLoaded(EntityLoadedEvent $event)
{
    if ($event->getContext()->getSource() instanceof \Shopware\Core\Framework\Api\Context\SalesChannelApiSource)
    {
        $entities = $event->getEntities();
        $manufacturerRepository = $this->container->get("product_manufacturer.repository");

        /** @var SalesChannelProductEntity $entity */
        foreach ($entities as $entity)
        {
            if ($entity->getManufacturerId() == null)
                continue;

            $criteria = new Criteria([$entity->getManufacturerId()]);

            /** @var ProductManufacturerEntity $currentManufacturer */
            $currentManufacturer = $manufacturerRepository
                ->search($criteria, $event->getContext())
                ->get($entity->getManufacturerId());

            if ($currentManufacturer != null)
            {
                $entity->setManufacturer($currentManufacturer);
            }
        }
    }

}

 

Hallo @FloC3‍,

erstmal vielen Dank für die superschnelle Antwort!

Leider habe ich es aber immer noch nicht geschafft. Ich muss zugeben, dass ich mich mit PHP nicht gut auskenne. Daher habe ich mich an das HowTo in der Doku gehalten.

Das hier sind die relevanten Dateien in meinem Plugin:

(1) Plugin > src > FiwaCms.php

(2) Plugin > src > Resources > config > services.xml

(3) Plugin > src > Subscriber > MySubscriber.php

 'onProductLoaded'
        ];
    }

    public function onProductDetails(EntityLoadedEvent $event)
    {
        if ($event->getContext()->getSource() instanceof \Shopware\Core\Framework\Api\Context\SalesChannelApiSource)
        {
            $entities = $event->getEntities();
            $manufacturerRepository = $this->container->get('product_manufacturer.repository');

            /** @var SalesChannelProductEntity $entity */
            foreach ($entities as $entity)
            {
                if ($entity->getManufacturerId() == null)
                    continue;

                $criteria = new Criteria([$entity->getManufacturerId()]);

                /** @var ProductManufacturerEntity $currentManufacturer */
                $currentManufacturer = $manufacturerRepository
                    ->search($criteria, $event->getContext())
                    ->get($entity->getManufacturerId());

                if ($currentManufacturer != null)
                {
                    $entity->setManufacturer($currentManufacturer);
                }
            }
        }
    }
}

Beim Aufruf des Shops bekomme ich dann die folgende Fehlermeldung:

Kannst du sagen, woran es hängt?

Im Voraus vielen Dank für deine Hilfe!

LG
finsti

sorry ich hatte noch einen Dreher der Methodenname in meinem Snippet…

 

ProductEvents::PRODUCT_LOADED_EVENT => " onProductLoaded"

public function onProductDetails(EntityLoadedEvent $event)

 

–> natürlich muss die Function auch  onProductLoaded heißen

Danke, @FloC3‍!

Darauf hätte ich sogar selbst kommen können. Wink

Leider hakt es nun aber an anderer Stelle (Notice: Undefined property: FiwaCms\Subscriber\MySubscriber::$container):

Hat jemand schon eine fertige Lösung??