custom/plugins/SasBlogModule/src/Controller/BlogController.php line 85

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Sas\BlogModule\Controller;
  3. use Sas\BlogModule\Content\Blog\BlogEntriesEntity;
  4. use Sas\BlogModule\Page\Search\BlogSearchPageLoader;
  5. use Shopware\Core\Content\Cms\Exception\PageNotFoundException;
  6. use Shopware\Core\Content\Cms\SalesChannel\SalesChannelCmsPageLoaderInterface;
  7. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  9. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  10. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  11. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  12. use Shopware\Core\System\SystemConfig\SystemConfigService;
  13. use Shopware\Storefront\Controller\StorefrontController;
  14. use Shopware\Storefront\Framework\Cache\Annotation\HttpCache;
  15. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  16. use Shopware\Storefront\Page\Navigation\NavigationPage;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\Routing\Annotation\Route;
  20. /**
  21.  * @RouteScope(scopes={"storefront"})
  22.  */
  23. class BlogController extends StorefrontController
  24. {
  25.     private GenericPageLoaderInterface $genericPageLoader;
  26.     private SalesChannelCmsPageLoaderInterface $cmsPageLoader;
  27.     private SystemConfigService $systemConfigService;
  28.     private EntityRepositoryInterface $blogRepository;
  29.     private BlogSearchPageLoader $blogSearchPageLoader;
  30.     public function __construct(
  31.         SystemConfigService $systemConfigService,
  32.         GenericPageLoaderInterface $genericPageLoader,
  33.         SalesChannelCmsPageLoaderInterface $cmsPageLoader,
  34.         EntityRepositoryInterface $blogRepository,
  35.         BlogSearchPageLoader $blogSearchPageLoader
  36.     ) {
  37.         $this->systemConfigService $systemConfigService;
  38.         $this->genericPageLoader $genericPageLoader;
  39.         $this->cmsPageLoader $cmsPageLoader;
  40.         $this->blogRepository $blogRepository;
  41.         $this->blogSearchPageLoader $blogSearchPageLoader;
  42.     }
  43.     /**
  44.      * @HttpCache()
  45.      * @Route("/sas_blog/search", name="sas.frontend.blog.search", methods={"GET"})
  46.      */
  47.     public function search(Request $requestSalesChannelContext $context): Response
  48.     {
  49.         try {
  50.             $page $this->blogSearchPageLoader->load($request$context);
  51.         } catch (MissingRequestParameterException $missingRequestParameterException) {
  52.             return $this->forwardToRoute('frontend.home.page');
  53.         }
  54.         return $this->renderStorefront('@Storefront/storefront/page/blog-search/index.html.twig', ['page' => $page]);
  55.     }
  56.     /**
  57.      * @HttpCache()
  58.      * @Route("/widgets/blog-search", name="widgets.blog.search.pagelet", methods={"GET", "POST"}, defaults={"XmlHttpRequest"=true})
  59.      *
  60.      * @throws MissingRequestParameterException
  61.      */
  62.     public function ajax(Request $requestSalesChannelContext $context): Response
  63.     {
  64.         $request->request->set('no-aggregations'true);
  65.         $page $this->blogSearchPageLoader->load($request$context);
  66.         $response $this->renderStorefront('@Storefront/storefront/page/blog-search/search-pagelet.html.twig', ['page' => $page]);
  67.         $response->headers->set('x-robots-tag''noindex');
  68.         return $response;
  69.     }
  70.     /**
  71.      * @HttpCache()
  72.      * @Route("/sas_blog/{articleId}", name="sas.frontend.blog.detail", methods={"GET"})
  73.      */
  74.     public function detailAction(string $articleIdRequest $requestSalesChannelContext $context): Response
  75.     {
  76.         $page $this->genericPageLoader->load($request$context);
  77.         $page NavigationPage::createFrom($page);
  78.         $criteria = new Criteria([$articleId]);
  79.         $criteria->addAssociations(['author.salutation''blogCategories']);
  80.         $results $this->blogRepository->search($criteria$context->getContext())->getEntities();
  81.         /** @var BlogEntriesEntity $entry */
  82.         $entry $results->first();
  83.         if (!$entry) {
  84.             throw new PageNotFoundException($articleId);
  85.         }
  86.         $pages $this->cmsPageLoader->load(
  87.             $request,
  88.             new Criteria([$this->systemConfigService->get('SasBlogModule.config.cmsBlogDetailPage')]),
  89.             $context
  90.         );
  91.         $page->setCmsPage($pages->first());
  92.         $metaInformation $page->getMetaInformation();
  93.         $metaInformation->setAuthor($entry->getAuthor()->getTranslated()['name']);
  94.         $page->setMetaInformation($metaInformation);
  95.         $page->setNavigationId($page->getHeader()->getNavigation()->getActive()->getId());
  96.         return $this->renderStorefront('@Storefront/storefront/page/content/index.html.twig', [
  97.             'page' => $page,
  98.             'entry' => $entry,
  99.         ]);
  100.     }
  101. }