src/Controller/Frontend/NewsController.php line 59

  1. <?php
  2. namespace App\Controller\Frontend;
  3. use App\Entity\Content\News;
  4. use App\Model\Content\NewsSearch;
  5. use App\Service\Common\Owner\Render;
  6. use App\Service\RSSWriter\Channel;
  7. use App\Service\RSSWriter\Feed;
  8. use App\Service\RSSWriter\Item;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. use Knp\Component\Pager\PaginatorInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\HttpFoundation\RequestStack;
  13. use Symfony\Component\HttpFoundation\Response;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  16. use Symfony\Contracts\Translation\TranslatorInterface;
  17. class NewsController extends AbstractController
  18. {
  19.     public function __construct(private readonly EntityManagerInterface $em)
  20.     {
  21.     }
  22.     /**
  23.      * @ Route("/news", name="news")
  24.      *
  25.      */
  26.     /* public function news(Request $request, PaginatorInterface $paginator, \App\Elastic\Search\NewsSearch $newsSearch)
  27.         {
  28.             $news_params = $this->getParameter('news');
  29.             $data = new NewsSearch();
  30.             $form = $this->createForm(NewsType::class, $data, [
  31.                 'type_category' => \App\Entity\Content\NewsType::TYPE_NEWS,
  32.             ]);
  33.             $form->handleRequest($request);
  34.             $form->isSubmitted() && $form->isValid();
  35.             $elQb = $newsSearch->findPaginated($data);
  36.     //        dump($elQb);
  37.     //        $news = $this->em->getRepository(News::class)->findNewsQb($data);
  38.     //        $news = $paginator->paginate($news, $request->query->getInt('page', 1), $news_params['news_page_count']);
  39.             $news = $paginator->paginate($elQb, $request->query->getInt('page', 1), $news_params['news_page_count']);
  40.     //dump($news);
  41.     //        dump($news);
  42.             return $this->render(
  43.                 'news/items.html.twig',
  44.                 [
  45.                     'form' => $form->createView(),
  46.                     'items' => $news,
  47.                 ]
  48.             );
  49.         }*/
  50.     #[Route(path'/news/{id}'name'news_item'requirements: ['id' => '\d+'])]
  51.     public function news_item(News $newsRequestStack $requestStack)
  52.     {
  53.         $news_params $this->getParameter('news');
  54.         $filter = new NewsSearch();
  55.         $filter->setLocale($requestStack->getMainRequest()->getLocale());
  56.         $other $this->em->getRepository(News::class)->findOtherNews(
  57.             [
  58.                 $news->getId()
  59.             ],
  60.             $news_params['main_page_news'],
  61.             $filter
  62.         );
  63.         return $this->render(
  64.             'news/item.html.twig',
  65.             [
  66.                 'item' => $news,
  67.                 'other_news' => $other,
  68.             ]
  69.         );
  70.     }
  71.     #[Route(path'/news.rss'name'news_rss')]
  72.     public function rssNews(PaginatorInterface $paginatorTranslatorInterface $translatorRender $render)
  73.     {
  74.         $news $this->em->getRepository(News::class)->findNewsQb();
  75.         /** @var News[] $news */
  76.         $news $paginator->paginate($news150);
  77.         $feed = new Feed();
  78.         $channel = new Channel();
  79.         $channel->title($translator->trans('site.rss_name'));
  80.         $channel->appendTo($feed);
  81.         $channel->url($this->generateUrl('main_olymp', [], UrlGeneratorInterface::ABSOLUTE_URL))->feedUrl(
  82.             $this->generateUrl('news_rss', [], UrlGeneratorInterface::ABSOLUTE_URL)
  83.         )->language('ru-RU');
  84.         foreach ($news as $n) {
  85.             $item = new Item();
  86.             $url_news $this->generateUrl('news_item', ['id' => $n->getId()], UrlGeneratorInterface::ABSOLUTE_URL);
  87.             $item->title($n->getCaption())->description(trim(strip_tags($n->getPreview() ?? $n->getText())))->url(
  88.                 $url_news
  89.             )
  90. //                ->author(strip_tags($render->render($n,'news_item')))
  91.                 ->pubDate($n->getPublishAt()->getTimestamp())->guid($url_newstrue)
  92. //                ->preferCdata(true) // By this, title and description become CDATA wrapped HTML.
  93.                 ->appendTo($channel);
  94.         }
  95.         $response = new Response($feed->render());
  96.         $response->headers->add(
  97.             [
  98.                 'Content-Type' => 'text/xml; charset=utf-8',
  99.             ]
  100.         );
  101.         return $response;
  102.     }
  103. }