Hallo,
ich möchte jedem Produkt im Shop ein customField programmatisch zuweisen. Der Feldinhalt kommt über eine externe API aus einem anderen System und wird über die Produktnummer verknüpft.
Ich habe das bisher über einen Subscriber gelöst, der auf folgendes Event reagiert:
public static function getSubscribedEvents(): array
{
return [
ProductEvents::PRODUCT_LOADED_EVENT => 'onProductsLoaded'
];
}
public function onProductsLoaded(EntityLoadedEvent $event): void
{
/** @var ProductEntity $productEntity */
foreach ($event->getEntities() as $productEntity) {
$customFields = $productEntity->getCustomFields();
$customFields['myField'] = getApiContent($productEntity->getProductNumber());
$productEntity->setCustomFields($customFields);
}
}
Prinzipiell funktioniert dass, aber ist sehr langsam, da das Event an gefühlt tausend Stellen im Shop und immer nur für ein Produkt aufgerufen wird. Außerdem passiert es immer wieder, was eigentlich nicht nötig wäre.
Wo könnte man dass performant für alle Produkte gesammelt machen? Ich vermute mal, dass man den Produktdaten-Service um das customField erweitern muss? Hat jemand ein Beispiel, wie sowas funktioniert?
Viele Grüße, Frank