FloC3
4. August 2020 um 18:41
1
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
FloC3
5. August 2020 um 06:36
2
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.
finsti
7. August 2020 um 10:39
3
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
FloC3
7. August 2020 um 10:46
4
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);
}
}
}
}
finsti
7. August 2020 um 12:05
5
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
FloC3
7. August 2020 um 12:19
6
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
finsti
7. August 2020 um 12:33
7
Danke, @FloC3!
Darauf hätte ich sogar selbst kommen können.
Leider hakt es nun aber an anderer Stelle (Notice: Undefined property: FiwaCms\Subscriber\MySubscriber::$container):
11shop
2. September 2020 um 12:38
8
Hat jemand schon eine fertige Lösung??