src/Hitso/Bundle/ContentBundle/Controller/Front/ArticleCategoryController.php line 127

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Hitso\Bundle\ContentBundle\Controller\Front;
  4. use Doctrine\ORM\QueryBuilder;
  5. use Hitso\Bundle\CommonBundle\Controller\Controller;
  6. use Hitso\Bundle\ContentBundle\Entity\ArticleCategory;
  7. use Hitso\Bundle\ContentBundle\Repository\ArticleRepository;
  8. use Pagerfanta\Adapter\DoctrineORMAdapter;
  9. use Pagerfanta\Pagerfanta;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\Routing\Annotation\Route;
  12. use WhiteOctober\BreadcrumbsBundle\Model\Breadcrumbs;
  13. /**
  14.  * Class ArticleCategoryController
  15.  *
  16.  * @Route("/", name="article_category_")
  17.  */
  18. class ArticleCategoryController extends Controller
  19. {
  20.     const ARTICLE_LIMIT 12;
  21.     /**
  22.      * @Route("/c", name="index")
  23.      */
  24.     public function indexAction(ArticleRepository $repositoryBreadcrumbs $breadcrumbs): Response
  25.     {
  26.         $breadcrumbs->addRouteItem('Articles''article_category_index');
  27.         $qb        $repository->getPublishedContentsQuery();
  28.         $cacheId   'article_category_all';
  29.         $paginator $this->getPaginator($qb1$cacheId);
  30.         
  31.         return $this->displayTemplate('index', [
  32.             'articles' => $paginator,
  33.         ]);
  34.     }
  35.     /**
  36.      * @Route("/c/page/{page}/{slug}", name="page", defaults={"slug"=null})
  37.      */
  38.     public function pageAction(
  39.         int $page 1,
  40.         ArticleCategory $category null,
  41.         ArticleRepository $repository,
  42.         Breadcrumbs $breadcrumbs
  43.     ): Response {
  44.         $breadcrumbs->addRouteItem('Articles''article_category_index');
  45.         if ($category instanceof ArticleCategory) {
  46.             $breadcrumbs->addRouteItem($category->getName(), 'dynamic_' $category->getRoute()->getId());
  47.             $cacheId 'article_category_' $category->getId();
  48.             $qb      $repository->getCategoryQuery($category);
  49.         } else {
  50.             $cacheId 'article_category_all';
  51.             $qb      $repository->getPublishedContentsQuery();
  52.         }
  53.         $paginator $this->getPaginator($qb$page$cacheId);
  54.         if ($category instanceof ArticleCategory) {
  55.             return $this->displayTemplate('show', [
  56.                 'currentCategory' => $category,
  57.                 'articles'        => $paginator,
  58.             ]);
  59.         } else {
  60.             return $this->displayTemplate('index', [
  61.                 'articles' => $paginator,
  62.             ]);
  63.         }
  64.     }
  65.     /**
  66.      * @Route("/c/paginate/{page}/{slug}", name="paginate", defaults={"_hittable"=true})
  67.      */
  68.     public function paginateAction(int $page 1ArticleCategory $category nullArticleRepository $repository): Response
  69.     {
  70.         if ($category instanceof ArticleCategory) {
  71.             $cacheId 'article_category_' $category->getId();
  72.             $qb      $repository->getCategoryQuery($category);
  73.         } else {
  74.             $cacheId 'article_category_all';
  75.             $qb      $repository->getPublishedContentsQuery();
  76.         }
  77.         $paginator $this->getPaginator($qb$page$cacheId);
  78.         $html      $this->renderView('HitsoContentBundle:Front/ArticleCategory:entry_loop.html.twig', [
  79.             'articles' => $paginator,
  80.         ]);
  81.         return $this->json($html);
  82.     }
  83.     /**
  84.      * @param ArticleRepository $repository
  85.      * @param ArticleCategory   $category
  86.      * @param Breadcrumbs       $breadcrumbs
  87.      *
  88.      * @return Response
  89.      */
  90.     public function showAction(ArticleRepository $repositoryArticleCategory $categoryBreadcrumbs $breadcrumbs): Response
  91.     {
  92.         $breadcrumbs->addRouteItem('Articles''article_category_index');
  93.         $breadcrumbs->addRouteItem($category->getName(), 'dynamic_' $category->getRoute()->getId());
  94.         $qb        $repository->getCategoryQuery($category);
  95.         $cacheId   'article_category_' $category->getId();
  96.         $paginator $this->getPaginator($qb1$cacheId);
  97.         return $this->displayTemplate('show', [
  98.             'currentCategory' => $category,
  99.             'articles'        => $paginator,
  100.         ]);
  101.     }
  102.     /**
  103.      * @param QueryBuilder $queryBuilder
  104.      * @param int          $page
  105.      * @param string       $cacheId
  106.      *
  107.      * @return Pagerfanta
  108.      */
  109.     protected function getPaginator(QueryBuilder $queryBuilderint $page 1string $cacheId): Pagerfanta
  110.     {
  111.         $cacheId .= '_' $this->getCurrentSite()->getId();
  112.         $adapter = new DoctrineORMAdapter($queryBuilder$cacheId);
  113.         return (new Pagerfanta($adapter))
  114.             ->setMaxPerPage(self::ARTICLE_LIMIT)
  115.             ->setCurrentPage($page);
  116.     }
  117. }