src/Website/Navigation/BreadcrumbHelperService.php line 82

Open in your IDE?
  1. <?php
  2. /**
  3.  * Pimcore
  4.  *
  5.  * This source file is available under two different licenses:
  6.  * - GNU General Public License version 3 (GPLv3)
  7.  * - Pimcore Enterprise License (PEL)
  8.  * Full copyright and license information is available in
  9.  * LICENSE.md which is distributed with this source code.
  10.  *
  11.  *  @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  12.  *  @license    http://www.pimcore.org/license     GPLv3 and PEL
  13.  */
  14. namespace App\Website\Navigation;
  15. use App\Model\Product\Category;
  16. use App\Website\LinkGenerator\AbstractProductLinkGenerator;
  17. use App\Website\LinkGenerator\CategoryLinkGenerator;
  18. use Pimcore\Model\DataObject\AbstractObject;
  19. use Pimcore\Model\DataObject\News;
  20. use Pimcore\Model\Document;
  21. use Pimcore\Translation\Translator;
  22. use Pimcore\Twig\Extension\Templating\Placeholder;
  23. use Symfony\Component\HttpFoundation\RequestStack;
  24. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  25. class BreadcrumbHelperService
  26. {
  27.     /**
  28.      * @var RequestStack
  29.      */
  30.     protected $requestStack;
  31.     /**
  32.      * @var Placeholder
  33.      */
  34.     protected $placeholderHelper;
  35.     /**
  36.      * @var CategoryLinkGenerator
  37.      */
  38.     protected $categoryLinkGenerator;
  39.     /**
  40.      * @var Translator
  41.      */
  42.     protected $translator;
  43.     /**
  44.      * @var UrlGeneratorInterface
  45.      */
  46.     protected $urlGenerator;
  47.     /**
  48.      * BreadcrumbHelperService constructor.
  49.      *
  50.      * @param RequestStack $requestStack
  51.      * @param Placeholder $placeholderHelper
  52.      * @param CategoryLinkGenerator $categoryLinkGenerator
  53.      * @param Translator $translator
  54.      * @param UrlGeneratorInterface $urlGenerator
  55.      */
  56.     public function __construct(RequestStack $requestStackPlaceholder $placeholderHelperCategoryLinkGenerator $categoryLinkGeneratorTranslator $translatorUrlGeneratorInterface $urlGenerator)
  57.     {
  58.         $this->requestStack $requestStack;
  59.         $this->placeholderHelper $placeholderHelper;
  60.         $this->categoryLinkGenerator $categoryLinkGenerator;
  61.         $this->translator $translator;
  62.         $this->urlGenerator $urlGenerator;
  63.     }
  64.     /**
  65.      * @return Document
  66.      */
  67.     protected function getCurrentDocument(): Document
  68.     {
  69.         return $this->requestStack->getCurrentRequest()->attributes->get('contentDocument');
  70.     }
  71.     public function enrichProductDetailPage(AbstractObject $product)
  72.     {
  73.         $document $this->getCurrentDocument();
  74.         //breadcrumbs
  75.         $category $product->getMainCategory();
  76.         if ($category) {
  77.             $parentId $document->getId();
  78.             $parentCategories $category->getParentCategoryList($document->getProperty(AbstractProductLinkGenerator::ROOT_CATEGORY_PROPERTY_NAME));
  79.             $parentCategories[] = $category;
  80.             foreach ($parentCategories as $index => $parentCategory) {
  81.                 $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  82.                     'parentId' => $parentId,
  83.                     'id' => 'category-' $parentCategory->getId(),
  84.                     'url' => $this->categoryLinkGenerator->generate($parentCategory, [], true),
  85.                     'label' => $parentCategory->getName()
  86.                 ]);
  87.                 $parentId 'category-' $parentCategory->getId();
  88.             }
  89.         }
  90.         $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  91.             'parentId' => $category 'category-' $category->getParentId() : '',
  92.             'id' => 'product-' $product->getId(),
  93.             'url' => '#',
  94.             'label' => $product->getOSName() ?? ''
  95.         ]);
  96.     }
  97.     public function enrichCategoryPage(Category $category)
  98.     {
  99.         $document $this->getCurrentDocument();
  100.         if ($category) {
  101.             $parentId $document->getId();
  102.             $parentCategories $category->getParentCategoryList($document->getProperty(AbstractProductLinkGenerator::ROOT_CATEGORY_PROPERTY_NAME));
  103.             $parentCategories[] = $category;
  104.             foreach ($parentCategories as $index => $parentCategory) {
  105.                 $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  106.                     'parentId' => $parentId,
  107.                     'id' => 'category-' $parentCategory->getId(),
  108.                     'url' => $this->categoryLinkGenerator->generate($parentCategory, [], true),
  109.                     'label' => $parentCategory->getName()
  110.                 ]);
  111.                 $parentId 'category-' $parentCategory->getId();
  112.             }
  113.         }
  114.     }
  115.     public function enrichCartPage()
  116.     {
  117.         $document $this->getCurrentDocument();
  118.         $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  119.             'parentId' => $document->getId(),
  120.             'id' => 'cart',
  121.             'url' => '#',
  122.             'label' => $this->translator->trans('cart.title')
  123.         ]);
  124.     }
  125.     public function enrichCheckoutPage()
  126.     {
  127.         $document $this->getCurrentDocument();
  128.         $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  129.             'parentId' => $document->getId(),
  130.             'id' => 'cart',
  131.             'url' => $this->urlGenerator->generate('shop-cart-detail'),
  132.             'label' => $this->translator->trans('cart.title')
  133.         ]);
  134.         $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  135.             'parentId' => 'cart',
  136.             'id' => 'checkout',
  137.             'url' => '#',
  138.             'label' => $this->translator->trans('general.checkout')
  139.         ]);
  140.     }
  141.     /**
  142.      * @param News $news
  143.      */
  144.     public function enrichNewsPage(News $news)
  145.     {
  146.         $document $this->getCurrentDocument();
  147.         $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  148.             'parentId' => $document->getId(),
  149.             'id' => 'news-' $news->getId(),
  150.             'url' => '#',
  151.             'label' => $news->getTitle()
  152.         ]);
  153.     }
  154.     public function enrichGenericDynamicPage($label)
  155.     {
  156.         $document $this->getCurrentDocument();
  157.         $this->placeholderHelper->__invoke('addBreadcrumb')->append([
  158.             'parentId' => $document->getId(),
  159.             'id' => 'search-result',
  160.             'label' => $label
  161.         ]);
  162.     }
  163. }