FloC3
August 4, 2020, 6:41pm
#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
August 5, 2020, 6:36am
#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
August 7, 2020, 10:39am
#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
August 7, 2020, 10:46am
#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
August 7, 2020, 12:05pm
#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
August 7, 2020, 12:19pm
#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
August 7, 2020, 12:33pm
#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
September 2, 2020, 12:38pm
#8
Hat jemand schon eine fertige Lösung??