vendor/store.shopware.com/netzpblog6/src/Storefront/Page/BlogPageLoader.php line 40

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace NetzpBlog6\Storefront\Page;
  3. use NetzpBlog6\Controller\StoreApi\BlogPost\AbstractBlogPostRoute;
  4. use NetzpBlog6\Core\Content\Blog\BlogEntity;
  5. use Psr\EventDispatcher\EventDispatcherInterface;
  6. use Shopware\Core\Content\Cms\SalesChannel\SalesChannelCmsPageLoaderInterface;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  9. use Shopware\Core\System\SystemConfig\SystemConfigService;
  10. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  11. use Shopware\Storefront\Page\MetaInformation;
  12. use Symfony\Component\HttpFoundation\Request;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. class BlogPageLoader
  15. {
  16.     private $genericPageLoader;
  17.     private $cmsPageLoader;
  18.     private $eventDispatcher;
  19.     private $blogRoute;
  20.     private $config;
  21.     public function __construct(
  22.         GenericPageLoaderInterface $genericPageLoader,
  23.         SalesChannelCmsPageLoaderInterface $cmsPageLoader,
  24.         EventDispatcherInterface $eventDispatcher,
  25.         AbstractBlogPostRoute $blogRoute,
  26.         SystemConfigService $config
  27.     )
  28.     {
  29.         $this->genericPageLoader $genericPageLoader;
  30.         $this->cmsPageLoader $cmsPageLoader;
  31.         $this->eventDispatcher $eventDispatcher;
  32.         $this->blogRoute $blogRoute;
  33.         $this->config $config;
  34.     }
  35.     public function load(Request $requestSalesChannelContext $contextstring $postId): BlogPage
  36.     {
  37.         $criteria = new Criteria([$postId]);
  38.         $post $this->blogRoute->load($postId$criteria$context)->getBlogPost();
  39.         if(! $post) {
  40.             throw new NotFoundHttpException('Blog post not found');
  41.         }
  42.         $config $this->config->get('NetzpBlog6.config'$context->getSalesChannelId());
  43.         $category $post->getCategory();
  44.         if($category && $category->getCmspageid()) {
  45.             $cmsPageId $category->getCmspageid();
  46.         }
  47.         else {
  48.             $cmsPageId array_key_exists('cmspage'$config) && $config['cmspage'] !== '' $config['cmspage'] : null;
  49.         }
  50.         if($cmsPageId !== null || $cmsPageId != '') {
  51.             $page $this->loadCmsPage($request$context$cmsPageId$post);
  52.         }
  53.         else {
  54.             $page $this->loadNormalPage($request$context$post);
  55.         }
  56.         $page->setPost($post);
  57.         $this->eventDispatcher->dispatch(
  58.             new BlogPageLoadedEvent($page$context$request)
  59.         );
  60.         return $page;
  61.     }
  62.     private function loadCmsPage(Request $request,
  63.                                  SalesChannelContext $salesChannelContext,
  64.                                  $cmsPageId,
  65.                                  BlogEntity $post)
  66.     {
  67.         $cmsPage $this->cmsPageLoader->load($request, new Criteria([$cmsPageId]), $salesChannelContext)->first();
  68.         $page BlogPage::createFrom($this->genericPageLoader->load($request$salesChannelContext));
  69.         $page->setCmsPage($cmsPage);
  70.         $page->setMetaInformation($this->getMetaInformation($post));
  71.         return $page;
  72.     }
  73.     private function loadNormalPage(Request $request,
  74.                                     SalesChannelContext $salesChannelContext,
  75.                                     BlogEntity $post)
  76.     {
  77.         $page $this->genericPageLoader->load($request$salesChannelContext);
  78.         $page BlogPage::createFrom($page);
  79.         $page->setMetaInformation($this->getMetaInformation($post));
  80.         return $page;
  81.     }
  82.     private function getMetaInformation(BlogEntity $post)
  83.     {
  84.         $meta = new MetaInformation();
  85.         $meta->setMetaTitle($post->getTranslation('metatitle') ?? $post->getTranslation('title'));
  86.         $meta->setMetaDescription($post->getTranslation('metadescription') ?? '');
  87.         if ($post->getAuthor()) {
  88.             $meta->setAuthor($post->getAuthor()->getTranslation('name') ?? '');
  89.         }
  90.         if ($post->getNoindex()) {
  91.             $meta->setRobots('noindex, nofollow');
  92.         }
  93.         else {
  94.             $meta->setRobots('all');
  95.         }
  96.         return $meta;
  97.     }
  98. }