custom/plugins/HyBuys/src/Controller/BlogController.php line 119

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace HyBuys\Main\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\DataAbstractionLayer\Search\Filter\EqualsFilter;
  10. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\RangeFilter;
  11. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  12. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  13. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  14. use Shopware\Core\System\SystemConfig\SystemConfigService;
  15. use Shopware\Storefront\Controller\StorefrontController;
  16. use Shopware\Storefront\Framework\Cache\Annotation\HttpCache;
  17. use Shopware\Storefront\Page\GenericPageLoaderInterface;
  18. use Shopware\Storefront\Page\Navigation\NavigationPage;
  19. use Symfony\Component\HttpFoundation\Request;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. /**
  23.  * @RouteScope(scopes={"storefront"})
  24.  */
  25. class BlogController extends StorefrontController
  26. {
  27.     private GenericPageLoaderInterface $genericPageLoader;
  28.     private SalesChannelCmsPageLoaderInterface $cmsPageLoader;
  29.     private SystemConfigService $systemConfigService;
  30.     private EntityRepositoryInterface $blogRepository;
  31.     private BlogSearchPageLoader $blogSearchPageLoader;
  32.     public function __construct(
  33.         SystemConfigService                $systemConfigService,
  34.         GenericPageLoaderInterface         $genericPageLoader,
  35.         SalesChannelCmsPageLoaderInterface $cmsPageLoader,
  36.         EntityRepositoryInterface          $blogRepository,
  37.         BlogSearchPageLoader               $blogSearchPageLoader
  38.     )
  39.     {
  40.         $this->systemConfigService $systemConfigService;
  41.         $this->genericPageLoader $genericPageLoader;
  42.         $this->cmsPageLoader $cmsPageLoader;
  43.         $this->blogRepository $blogRepository;
  44.         $this->blogSearchPageLoader $blogSearchPageLoader;
  45.     }
  46.     /**
  47.      * @HttpCache()
  48.      * @Route("/sas_blog/search", name="sas.frontend.blog.search", methods={"GET"})
  49.      */
  50.     public function search(Request $requestSalesChannelContext $context): Response
  51.     {
  52.         try {
  53.             $page $this->blogSearchPageLoader->load($request$context);
  54.         } catch (MissingRequestParameterException $missingRequestParameterException) {
  55.             return $this->forwardToRoute('frontend.home.page');
  56.         }
  57.         return $this->renderStorefront('@Storefront/storefront/page/blog-search/index.html.twig', ['page' => $page]);
  58.     }
  59.     /**
  60.      * @HttpCache()
  61.      * @Route("/widgets/blog-search", name="widgets.blog.search.pagelet", methods={"GET", "POST"}, defaults={"XmlHttpRequest"=true})
  62.      *
  63.      * @throws MissingRequestParameterException
  64.      */
  65.     public function ajax(Request $requestSalesChannelContext $context): Response
  66.     {
  67.         $request->request->set('no-aggregations'true);
  68.         $page $this->blogSearchPageLoader->load($request$context);
  69.         $response $this->renderStorefront('@Storefront/storefront/page/blog-search/search-pagelet.html.twig', ['page' => $page]);
  70.         $response->headers->set('x-robots-tag''noindex');
  71.         return $response;
  72.     }
  73.     /**
  74.      * @HttpCache()
  75.      * @Route("/sas_blog/{articleId}", name="sas.frontend.blog.detail", methods={"GET"})
  76.      */
  77.     public function detailAction(string $articleIdRequest $requestSalesChannelContext $context): Response
  78.     {
  79.         $page $this->genericPageLoader->load($request$context);
  80.         $page NavigationPage::createFrom($page);
  81.         $criteria = new Criteria([$articleId]);
  82.         $criteria->addAssociations(['author.salutation''blogCategories']);
  83.         $results $this->blogRepository->search($criteria$context->getContext())->getEntities();
  84.         /** @var BlogEntriesEntity $entry */
  85.         $entry $results->first();
  86.         if (!$entry) {
  87.             throw new PageNotFoundException($articleId);
  88.         }
  89.         $pages $this->cmsPageLoader->load(
  90.             $request,
  91.             new Criteria([$this->systemConfigService->get('SasBlogModule.config.cmsBlogDetailPage')]),
  92.             $context
  93.         );
  94.         $criteria2 = new Criteria();
  95.         $dateTime2 = new \DateTime();
  96.         $criteria2->addAssociations(['author.salutation']);
  97.         $criteria2->addFilter(
  98.             new EqualsFilter('active'true),
  99.             new RangeFilter('publishedAt', [RangeFilter::LTE => $dateTime2->format(\DATE_ATOM)])
  100.         );
  101.         $blogs $this->blogRepository->search($criteria2$context->getContext())->getEntities();
  102.         $page->setCmsPage($pages->first());
  103.         $metaInformation $page->getMetaInformation();
  104.         $metaInformation->setAuthor($entry->getAuthor()->getTranslated()['name']);
  105.         $page->setMetaInformation($metaInformation);
  106.         $page->setNavigationId($page->getHeader()->getNavigation()->getActive()->getId());
  107.         return $this->renderStorefront('@Storefront/storefront/page/content/blog.html.twig', [
  108.             'page' => $page,
  109.             'blogs' => $blogs,
  110.             'entry' => $entry,
  111.         ]);
  112.     }
  113.     /**
  114.      * @HttpCache()
  115.      * @Route("/blog/rss", name="frontend.sas.blog.rss", methods={"GET"})
  116.      */
  117.     public function rss(Request $requestSalesChannelContext $context): Response
  118.     {
  119.         $criteria = new Criteria();
  120.         $dateTime = new \DateTime();
  121.         $criteria->addAssociations(['author.salutation']);
  122.         $criteria->addFilter(
  123.             new EqualsFilter('active'true),
  124.             new RangeFilter('publishedAt', [RangeFilter::LTE => $dateTime->format(\DATE_ATOM)])
  125.         );
  126.         $results $this->blogRepository->search($criteria$context->getContext())->getEntities();
  127.         $page $this->genericPageLoader->load($request$context);
  128.         $page NavigationPage::createFrom($page);
  129.         $response $this->renderStorefront('@SasBlogModule/storefront/page/rss.html.twig', [
  130.             'results' => $results,
  131.             'page' => $page,
  132.         ]);
  133.         $response->headers->set('Content-Type''application/xml; charset=utf-8');
  134.         return $response;
  135.     }
  136. }