vendor/store.shopware.com/moorlmagazine/src/Storefront/Page/MagazineArticle/MagazineArticlePageLoader.php line 40

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace MoorlMagazine\Storefront\Page\MagazineArticle;
  3. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Detail\AbstractMagazineArticleDetailRoute;
  4. use MoorlMagazine\Core\Content\MagazineArticle\SalesChannel\Detail\MagazineArticleDetailRoute;
  5. use Shopware\Core\Content\Cms\Exception\PageNotFoundException;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  8. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  9. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  10. use Symfony\Component\HttpFoundation\Request;
  11. class MagazineArticlePageLoader
  12. {
  13.     private GenericPageLoaderInterface $genericLoader;
  14.     private MagazineArticleDetailRoute $magazineArticleDetailRoute;
  15.     public function __construct(
  16.         GenericPageLoaderInterface $genericLoader,
  17.         AbstractMagazineArticleDetailRoute $magazineArticleDetailRoute
  18.     ) {
  19.         $this->genericLoader $genericLoader;
  20.         $this->magazineArticleDetailRoute $magazineArticleDetailRoute;
  21.     }
  22.     /**
  23.      * @throws MissingRequestParameterException
  24.      * @throws PageNotFoundException
  25.      */
  26.     public function load(Request $requestSalesChannelContext $context): MagazineArticlePage
  27.     {
  28.         $magazineArticleId $request->attributes->get('magazineArticleId');
  29.         if (!$magazineArticleId) {
  30.             throw new MissingRequestParameterException('magazineArticleId''/magazineArticleId');
  31.         }
  32.         $criteria = new Criteria();
  33.         $criteria->addAssociation('creator.avatar');
  34.         $result $this->magazineArticleDetailRoute->load($magazineArticleId$request$context$criteria);
  35.         $magazineArticle $result->getMagazineArticle();
  36.         $page $this->genericLoader->load($request$context);
  37.         /** @var MagazineArticlePage $page */
  38.         $page MagazineArticlePage::createFrom($page);
  39.         $page->setMagazineArticle($magazineArticle);
  40.         $page->setCreator($magazineArticle->getCreator());
  41.         $page->setCmsPage($magazineArticle->getCmsPage());
  42.         $this->loadMetaData($page);
  43.         return $page;
  44.     }
  45.     public function reload(Request $requestMagazineArticlePage $pageSalesChannelContext $context): MagazineArticlePage
  46.     {
  47.         $result $this->magazineArticleDetailRoute->reload($request$context$page->getMagazineArticle());
  48.         $magazineArticle $result->getMagazineArticle();
  49.         $page->setCmsPage($magazineArticle->getCmsPage());
  50.         return $page;
  51.     }
  52.     private function loadMetaData(MagazineArticlePage $page): void
  53.     {
  54.         $metaInformation $page->getMetaInformation();
  55.         if (!$metaInformation) {
  56.             return;
  57.         }
  58.         $metaDescription $page->getMagazineArticle()->getTranslation('metaDescription')
  59.             ?? $page->getMagazineArticle()->getTranslation('description');
  60.         $metaInformation->setMetaDescription((string) $metaDescription);
  61.         $metaInformation->setMetaKeywords((string) $page->getMagazineArticle()->getTranslation('keywords'));
  62.         if ((string) $page->getMagazineArticle()->getTranslation('metaTitle') !== '') {
  63.             $metaInformation->setMetaTitle((string) $page->getMagazineArticle()->getTranslation('metaTitle'));
  64.             return;
  65.         }
  66.         $metaTitleParts = [$page->getMagazineArticle()->getTranslation('name')];
  67.         $metaInformation->setMetaTitle(implode(' | '$metaTitleParts));
  68.     }
  69. }