custom/plugins/MoorlMerchantFinder/src/Storefront/Page/Merchant/MerchantPageLoader.php line 49

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Moorl\MerchantFinder\Storefront\Page\Merchant;
  3. use Moorl\MerchantFinder\Core\Content\Merchant\SalesChannel\MerchantDetailRoute;
  4. use Moorl\MerchantFinder\MoorlMerchantFinder;
  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 MerchantPageLoader
  14. {
  15.     private GenericPageLoaderInterface $genericLoader;
  16.     private MerchantDetailRoute $merchantDetailRoute;
  17.     private AbstractProductListingRoute $productListingRoute;
  18.     public function __construct(
  19.         GenericPageLoaderInterface $genericLoader,
  20.         MerchantDetailRoute $merchantDetailRoute,
  21.         AbstractProductListingRoute $productListingRoute
  22.     ) {
  23.         $this->genericLoader $genericLoader;
  24.         $this->merchantDetailRoute $merchantDetailRoute;
  25.         $this->productListingRoute $productListingRoute;
  26.     }
  27.     /**
  28.      * @throws MissingRequestParameterException
  29.      * @throws PageNotFoundException
  30.      */
  31.     public function load(Request $requestSalesChannelContext $context): MerchantPage
  32.     {
  33.         $merchantId $request->attributes->get('merchantId');
  34.         if (!$merchantId) {
  35.             throw new MissingRequestParameterException('merchantId''/merchantId');
  36.         }
  37.         $criteria = new Criteria();
  38.         $criteria->addFilter(new EqualsFilter('MoorlMerchants.id'$merchantId));
  39.         $result $this->productListingRoute->load(MoorlMerchantFinder::NAME$request$context$criteria);
  40.         $products $result->getResult();
  41.         $criteria = new Criteria();
  42.         $result $this->merchantDetailRoute->load($merchantId$request$context$criteria);
  43.         $merchant $result->getMerchant();
  44.         if (!$merchant->getActive()) {
  45.             throw new PageNotFoundException($merchant->getId());
  46.         }
  47.         $page $this->genericLoader->load($request$context);
  48.         /** @var MerchantPage $page */
  49.         $page MerchantPage::createFrom($page);
  50.         $page->setProducts($products);
  51.         $page->setMerchant($merchant);
  52.         $page->setCmsPage($merchant->getCmsPage());
  53.         $this->loadMetaData($page);
  54.         return $page;
  55.     }
  56.     private function loadMetaData(MerchantPage $page): void
  57.     {
  58.         $metaInformation $page->getMetaInformation();
  59.         if (!$metaInformation) {
  60.             return;
  61.         }
  62.         $metaDescription $page->getMerchant()->getTranslation('teaser')
  63.             ?? $page->getMerchant()->getTranslation('teaser');
  64.         $metaInformation->setMetaDescription((string) $metaDescription);
  65.         if ((string) $page->getMerchant()->getTranslation('name') !== '') {
  66.             $metaInformation->setMetaTitle((string) $page->getMerchant()->getTranslation('name'));
  67.             return;
  68.         }
  69.         $metaTitleParts = [$page->getMerchant()->getTranslation('name')];
  70.         $metaInformation->setMetaTitle(implode(' | '$metaTitleParts));
  71.     }
  72. }