src/Hitso/Bundle/CatalogBundle/Service/Sitemap/ProductProvider.php line 48

Open in your IDE?
  1. <?php
  2. namespace Hitso\Bundle\CatalogBundle\Service\Sitemap;
  3. use Doctrine\ORM\EntityRepository;
  4. use Doctrine\ORM\Tools\Pagination\Paginator;
  5. use Hitso\Bundle\CatalogBundle\Entity\Product;
  6. use Hitso\Bundle\ContentBundle\Manager\ContentManager;
  7. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  8. use Hitso\Bundle\SeoBundle\Provider\AbstractSitemapProvider;
  9. use Hitso\Bundle\SeoBundle\Sitemap\SitemapSectionPage;
  10. use Hitso\Bundle\SeoBundle\Sitemap\Url;
  11. class ProductProvider extends AbstractSitemapProvider
  12. {
  13.     /**
  14.      * @var ContentManager
  15.      */
  16.     protected $manager;
  17.     /**
  18.      * ProductProvider constructor.
  19.      *
  20.      * @param UrlGeneratorInterface $urlGenerator
  21.      * @param ContentManager        $manager
  22.      */
  23.     public function __construct(UrlGeneratorInterface $urlGeneratorContentManager $manager)
  24.     {
  25.         parent::__construct($urlGenerator);
  26.         $this->manager $manager;
  27.     }
  28.     /**
  29.      * @param int $pageNumber
  30.      *
  31.      * @return SitemapSectionPage
  32.      */
  33.     public function getPage($pageNumber)
  34.     {
  35.         $this->manager->setEntityClass(Product::class);
  36.         $products $this->manager
  37.             ->getRepository()
  38.             ->getEnabledProductsQuery()
  39.             ->setMaxResults($this->getMaxItemsPerPage())
  40.             ->setFirstResult(($pageNumber 1) * $this->getMaxItemsPerPage())
  41.             ->getQuery()
  42.             ->getResult();
  43.         $page = new SitemapSectionPage();
  44.         /** @var Product $product */
  45.         foreach ($products as $product) {
  46.             $url $this->generateUrl('dynamic_' $product->getRoute()->getId());
  47.             $page->addUrl(new Url($urlUrl::CHANGEFREQ_WEEKLY0.6$product->getUpdatedAt()));
  48.         }
  49.         return $page;
  50.     }
  51.     /**
  52.      * @return string
  53.      */
  54.     public function getSectionName()
  55.     {
  56.         return 'products';
  57.     }
  58.     /**
  59.      * @return float|int
  60.      */
  61.     public function getCount()
  62.     {
  63.         $this->manager->setEntityClass(Product::class);
  64.         /** @var EntityRepository $repository */
  65.         $repository   $this->manager->getRepository();
  66.         $queryBuilder $repository->createQueryBuilder('e');
  67.         $query        $queryBuilder->getQuery();
  68.         $query->useQueryCache(true);
  69.         $query->useResultCache(true);
  70.         $paginator = new Paginator($querytrue);
  71.         $paginator->setUseOutputWalkers(false);
  72.         return $paginator->count();
  73.     }
  74. }