<?php
namespace zenit\PlatformGravitySet2\Subscriber;
use Shopware\Core\Content\Category\Event\CategoryLoadedEvent;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\Context;
use Psr\Log\LoggerInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
use Shopware\Core\Content\Category\CategoryEvents;
class CategoryCustomFieldMediaSubscriber implements EventSubscriberInterface
{
private $mediaRepository;
private $logger;
public function __construct(EntityRepository $mediaRepository, LoggerInterface $logger)
{
$this->mediaRepository = $mediaRepository;
$this->logger = $logger;
}
public static function getSubscribedEvents()
{
return [
CategoryEvents::CATEGORY_LOADED_EVENT => 'entityLoaded',
'sales_channel.' . CategoryEvents::CATEGORY_LOADED_EVENT => 'entityLoaded',
];
}
public function entityLoaded(EntityLoadedEvent $event)
{
$categories = $event->getEntities();
$context = $event->getContext();
foreach ($categories as $category) {
$this->logger->info('CategoryLoadedEvent triggered', ['categoryId' => $category]);
$customFields = $category->getCustomFields();
if (isset($customFields['navigation_image'])) {
$mediaId = $customFields['navigation_image'];
$media = $this->mediaRepository->search(
(new \Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria([$mediaId])),
$context
)->get($mediaId);
if ($media) {
$category->addExtension('navigationImage', $media);
}
}
}
}
}