vendor/store.shopware.com/loyxxsw6categorytreeteaser/src/Subscriber/PageLoadedEventSubscriber.php line 60

Open in your IDE?
  1. <?php
  2. namespace LoyxxSW6CategoryTreeTeaser\Subscriber;
  3. use LoyxxSW6CategoryTreeTeaser\LoyxxSW6CategoryTreeTeaser;
  4. use LoyxxSW6CategoryTreeTeaser\Struct\NavigationTree;
  5. use Shopware\Core\Content\Category\CategoryEntity;
  6. use Shopware\Core\Content\ImportExport\Event\Subscriber\CategoryCriteriaSubscriber;
  7. use Shopware\Core\Content\Media\DataAbstractionLayer\MediaRepositoryDecorator;
  8. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  11. use Shopware\Core\Framework\DataAbstractionLayer\Search\Sorting\FieldSorting;
  12. use Shopware\Core\System\SystemConfig\SystemConfigService;
  13. use Shopware\Storefront\Pagelet\Header\HeaderPageletLoadedEvent;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. use Shopware\Core\Framework\Uuid\Uuid;
  16. class PageLoadedEventSubscriber implements EventSubscriberInterface
  17. {
  18.     private const BUNDLE_NAME 'LoyxxSW6CategoryTreeTeaser';
  19.     /**
  20.      * @var SystemConfigService
  21.      */
  22.     private $systemConfigService;
  23.     /**
  24.      * @var MediaRepositoryDecorator
  25.      */
  26.     private $mediaRepositoryDecorator;
  27.     /**
  28.      * @var EntityRepositoryInterface
  29.      */
  30.     private $categoryRepository;
  31.     public function __construct(
  32.         SystemConfigService $systemConfigService,
  33.         MediaRepositoryDecorator $mediaRepositoryDecorator,
  34.         EntityRepositoryInterface $categoryRepository
  35.     )
  36.     {
  37.         $this->systemConfigService $systemConfigService;
  38.         $this->mediaRepositoryDecorator $mediaRepositoryDecorator;
  39.         $this->mediaRepositoryDecorator $mediaRepositoryDecorator;
  40.         $this->categoryRepository $categoryRepository;
  41.     }
  42.     public static function getSubscribedEvents(): array
  43.     {
  44.         return [
  45.             HeaderPageletLoadedEvent::class => 'onPageLoadedEvent'
  46.         ];
  47.     }
  48.     public function onPageLoadedEvent(HeaderPageletLoadedEvent $event)
  49.     {
  50.         /** get current active product */
  51.         $currentActivePage $event->getPagelet()->getNavigation()->getActive();
  52.         $navigationTree $event->getPagelet()->getNavigation()->getChildren($currentActivePage->getId());
  53.         //get children of the selected category
  54.         $criteria = new Criteria();
  55.         $criteria->addFilter(new EqualsFilter('id'$currentActivePage->getId()));
  56.         $criteria->addAssociation('children');
  57.         //Albert: uit wegens probleem met volgorde subcats in frontend - zie mijn doc
  58.         //$criteria->getAssociation('children')->addFilter(new EqualsFilter('active', 1));
  59.         $criteria->getAssociation('children')->addSorting(new FieldSorting('level'));
  60.         $criteria->getAssociation('children')->addAssociation('media');
  61.         /** @var CategoryEntity $category */
  62.         $category $this->categoryRepository->search($criteria$event->getContext())->first();
  63.         if ($category && !is_null($category->getChildren())){
  64.             $category->getChildren()->sortByPosition();
  65.         }
  66.         $pluginMediaPlaceholder $this->systemConfigService->get(self::BUNDLE_NAME '.config.pluginMediaPlaceholder');
  67.         $defaultMedia NULL;
  68.         if ($pluginMediaPlaceholder) {
  69.             $criteria = new Criteria([
  70.                 $pluginMediaPlaceholder
  71.             ]);
  72.             $mediaEntity $this->mediaRepositoryDecorator->search(
  73.                 $criteria,
  74.                 $event->getContext()
  75.             )->first();
  76.             $defaultMedia $mediaEntity;
  77.         }
  78.         $event->getPagelet()->addExtension('navigationTree', new NavigationTree($category $category->getChildren() : [], $defaultMedia));
  79.     }
  80. }