custom/plugins/LoyxxRichBreadcrumb/src/Subscriber/PageLoadedEventSubscriber.php line 62

Open in your IDE?
  1. <?php
  2. namespace LoyxxRichBreadcrumb\Subscriber;
  3. use LoyxxRichBreadcrumb\Struct\Breadcrumb;
  4. use Shopware\Core\Content\Seo\SeoUrlPlaceholderHandlerInterface;
  5. use Shopware\Core\System\SystemConfig\SystemConfigService;
  6. use Shopware\Storefront\Framework\Routing\RequestTransformer;
  7. use Shopware\Storefront\Pagelet\Header\HeaderPageletLoadedEvent;
  8. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  9. use LoyxxRichBreadcrumb\Traits\Microdata;
  10. /**
  11.  * Class PageLoadedEventSubscriber
  12.  * @package LoyxxRichBreadcrumb\Subscriber
  13.  */
  14. class PageLoadedEventSubscriber implements EventSubscriberInterface
  15. {
  16.     use Microdata;
  17.     /**
  18.      * Bundle Name
  19.      */
  20.     public const BUNDLE_NAME 'LoyxxRichBreadcrumb';
  21.     /**
  22.      * @var SeoUrlPlaceholderHandlerInterface
  23.      */
  24.     private $seoUrlPlaceholderHandler;
  25.     /**
  26.      * @var SystemConfigService
  27.      */
  28.     private $systemConfigService;
  29.     /**
  30.      * PageLoadedEventSubscriber constructor.
  31.      * @param SeoUrlPlaceholderHandlerInterface $seoUrlPlaceholderHandler
  32.      * @param SystemConfigService $systemConfigService
  33.      */
  34.     public function __construct(SeoUrlPlaceholderHandlerInterface $seoUrlPlaceholderHandlerSystemConfigService $systemConfigService)
  35.     {
  36.         $this->seoUrlPlaceholderHandler $seoUrlPlaceholderHandler;
  37.         $this->systemConfigService $systemConfigService;
  38.     }
  39.     /**
  40.      * @return array|string[]
  41.      */
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             HeaderPageletLoadedEvent::class => 'onPageLoaded'
  46.         ];
  47.     }
  48.     /**
  49.      * @param HeaderPageletLoadedEvent $event
  50.      */
  51.     public function onPageLoaded(HeaderPageletLoadedEvent $event)
  52.     {
  53.         // create microdata for breadcrumb
  54.         $host $event->getRequest()->attributes->get(RequestTransformer::SALES_CHANNEL_ABSOLUTE_BASE_URL) .
  55.                 $event->getRequest()->attributes->get(RequestTransformer::SALES_CHANNEL_BASE_URL);
  56.         $uri $event->getRequest()->getRequestUri();
  57.         $breadcrumb NULL;
  58.         /**
  59.          * Since we are handling product page loaded breadcrumb this will show duplicate data
  60.          * so we need to skip breadcrumb generation for product page
  61.          */
  62.         if ($event->getRequest()->attributes->get('_route') !== 'frontend.detail.page'){
  63.             $breadcrumb $this->createMicrodata(
  64.                 $event,
  65.                 $this->getBreadcrumbs($event),
  66.                 $host,
  67.                 $event->getSalesChannelContext(),
  68.                 $uri
  69.             );
  70.         }
  71.         /**
  72.          * Hide breadcrumb on home page
  73.         $breadcrumbIsVisible = $this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME.'.config.isInvisible');
  74.         if ($this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME . '.config.isHiddenOnHomePage') && $event->getRequest()->attributes->get('_route') === 'frontend.home.page'){
  75.             $breadcrumbIsVisible = false;
  76.         }
  77.          */
  78.         $breadcrumbStruct = new Breadcrumb(
  79.             $breadcrumb,
  80.             $this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME.'.config.isInvisible'),
  81.             $this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME '.config.showProductTitle'),
  82.             $this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME '.config.separator'),
  83.             $this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME '.config.isVisibleHomeLink'),
  84.             $this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME '.config.isHiddenOnHomePage'),
  85.             $this->systemConfigService->get(PageLoadedEventSubscriber::BUNDLE_NAME '.config.homeLabel'),
  86.             $host,
  87.             $uri
  88.         );
  89.         $event->getPagelet()->addExtension('breadcrumb'$breadcrumbStruct);
  90.     }
  91.     /**
  92.      * @param HeaderPageletLoadedEvent $event
  93.      * @return array|null
  94.      */
  95.     private function getBreadcrumbs(HeaderPageletLoadedEvent $event)
  96.     {
  97.         return $event->getPagelet()
  98.             ->getNavigation()
  99.             ->getActive()
  100.             ->buildSeoBreadcrumb(
  101.                 $event->getSalesChannelContext()->getSalesChannel()->getNavigationCategoryId()
  102.             );
  103.     }
  104. }