custom/plugins/theme/src/Subscriber/MenuOffcanvasSubscriber.php line 33

Open in your IDE?
  1. <?php
  2. declare(strict_types 1);
  3. namespace DonCarneTheme\Subscriber;
  4. use Shopware\Storefront\Pagelet\Menu\Offcanvas\MenuOffcanvasPageletLoadedEvent;
  5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  6. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsAnyFilter;
  9. use Shopware\Core\Framework\Context;
  10. use Shopware\Core\Framework\Struct\ArrayStruct;
  11. class MenuOffcanvasSubscriber implements EventSubscriberInterface
  12. {
  13.     private EntityRepository $categoryRepository;
  14.     public function __construct(
  15.         EntityRepository $categoryRepository
  16.     )
  17.     {
  18.         $this->categoryRepository $categoryRepository;
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             MenuOffcanvasPageletLoadedEvent::class => 'onPageletLoaded'
  24.         ];
  25.     }
  26.     public function onPageletLoaded(MenuOffcanvasPageletLoadedEvent $event): void
  27.     {
  28.         $activeCategory $event->getPagelet()->getNavigation()->getActive();
  29.         if(!$activeCategory){
  30.             return;
  31.         }
  32.  
  33.         $extraCategories false;
  34.         $customFields $activeCategory->getCustomFields();
  35.         if($customFields && isset($customFields['doncarne_category_special_menu_display'])){
  36.             $categoryIds = isset($customFields['doncarne_category_custom_fields_special_menu_extra_categories']) ? $customFields['doncarne_category_custom_fields_special_menu_extra_categories'] : [];
  37.             if(!empty($categoryIds)){
  38.                 $extraCategories $this->getCategories($categoryIds$event->getContext());
  39.             }
  40.         }
  41.         if($extraCategories){
  42.             $event->getPagelet()->addExtension(
  43.                 'menuExtraCategories',
  44.                 new ArrayStruct($extraCategories)
  45.             );
  46.         }
  47.     }
  48.     private function getCategories(array $categoryIdsContext $context): array
  49.     {
  50.         $criteria = (new Criteria())->addFilter(new EqualsAnyFilter('id'$categoryIds));
  51.         return $this->categoryRepository->search($criteria$context)->getElements();
  52.     }
  53. }