Ich möchte alle Varianten eines Produktes laden.
Nachdem ich schon etwas gegooglet habe, habe ich diesen Code zusammen:
class ProductViewSubscriber implements EventSubscriberInterface
{
private EntityRepositoryInterface $productRepository;
public function __construct(EntityRepositoryInterface $productRepository)
{
$this->productRepository = $productRepository;
}
public function getVariantsOfProduct(SalesChannelProductEntity $product, Context $context): EntitySearchResult
{
$parentProduct = $product->getParent();
if ($parentProduct != null) {
// Wir brauchen das Parent Product um die Varianten des Objektes herauszufinden
$product = $parentProduct;
}
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('product.parentId',
$product->getProductNumber()));
return $this->productRepository->search(new Criteria(), $context);
}
public static function getSubscribedEvents(): array
{
return [
ProductPageLoadedEvent::class => ['addVariants'],
];
}
public function addVariants(ProductPageLoadedEvent $pEvent)
{
$products = $this->getVariantsOfProduct($product = $pEvent->getPage()->getProduct(), $pEvent->getContext());
$matchingVariants = $products->getElements();
}
}
Anders als Online beschrieben enthält $matchingVariants aber nicht nur die Varianten sondern alle Produkte des Shops. Wie kann der Code geändert werden, dass nur die Produkte geladen werden, die Varianten des Produkts sind, für welches das ProductPageLoadedEvent ausgeführt wird?