vendor/store.shopware.com/moorlcreator/src/Storefront/Page/Creator/CreatorPageLoader.php line 56

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace MoorlCreator\Storefront\Page\Creator;
  3. use MoorlCreator\Core\Content\Creator\SalesChannel\CreatorDetailRoute;
  4. use MoorlCreator\MoorlCreator;
  5. use Shopware\Core\Content\Cms\Exception\PageNotFoundException;
  6. use Shopware\Core\Content\Product\SalesChannel\Listing\AbstractProductListingRoute;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  9. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  10. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  11. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  12. use Symfony\Component\HttpFoundation\Request;
  13. class CreatorPageLoader
  14. {
  15.     private GenericPageLoaderInterface $genericLoader;
  16.     private CreatorDetailRoute $creatorDetailRoute;
  17.     private AbstractProductListingRoute $productListingRoute;
  18.     public function __construct(
  19.         GenericPageLoaderInterface $genericLoader,
  20.         CreatorDetailRoute $creatorDetailRoute,
  21.         AbstractProductListingRoute $productListingRoute
  22.     ) {
  23.         $this->genericLoader $genericLoader;
  24.         $this->creatorDetailRoute $creatorDetailRoute;
  25.         $this->productListingRoute $productListingRoute;
  26.     }
  27.     /**
  28.      * @throws MissingRequestParameterException
  29.      * @throws PageNotFoundException
  30.      */
  31.     public function load(Request $requestSalesChannelContext $context): CreatorPage
  32.     {
  33.         $creatorId $request->attributes->get('creatorId');
  34.         if (!$creatorId) {
  35.             throw new MissingRequestParameterException('creatorId''/creatorId');
  36.         }
  37.         $criteria = new Criteria();
  38.         $criteria->addFilter(new EqualsFilter('creators.id'$creatorId));
  39.         $result $this->productListingRoute->load(MoorlCreator::NAME$request$context$criteria);
  40.         $products $result->getResult();
  41.         $criteria = new Criteria();
  42.         $result $this->creatorDetailRoute->load($creatorId$request$context$criteria);
  43.         $creator $result->getCreator();
  44.         if (!$creator->getActive()) {
  45.             throw new PageNotFoundException($creator->getId());
  46.         }
  47.         $page $this->genericLoader->load($request$context);
  48.         /** @var CreatorPage $page */
  49.         $page CreatorPage::createFrom($page);
  50.         $page->setProducts($products);
  51.         $page->setCreator($creator);
  52.         $page->setCmsPage($creator->getCmsPage());
  53.         $this->loadMetaData($page);
  54.         return $page;
  55.     }
  56.     private function loadMetaData(CreatorPage $page): void
  57.     {
  58.         $metaInformation $page->getMetaInformation();
  59.         if (!$metaInformation) {
  60.             return;
  61.         }
  62.         $metaDescription $page->getCreator()->getTranslation('teaser')
  63.             ?? $page->getCreator()->getTranslation('teaser');
  64.         $metaInformation->setMetaDescription((string) $metaDescription);
  65.         if ((string) $page->getCreator()->getTranslation('name') !== '') {
  66.             $metaInformation->setMetaTitle((string) $page->getCreator()->getTranslation('name'));
  67.             return;
  68.         }
  69.         $metaTitleParts = [$page->getCreator()->getTranslation('name')];
  70.         $metaInformation->setMetaTitle(implode(' | '$metaTitleParts));
  71.     }
  72. }