<?php
namespace Uniski\CMSBundle\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Uniski\CMSBundle\Entity\Post;
use Uniski\ResourceBundle\Controller\BaseController;
/**
* Blog Controller
* Migrado a BaseController (AbstractController) para Symfony 4.4
*/
class BlogController extends BaseController
{
/**
* @Route("noticias", name="blog")
* @Route("noticias/tag/{slug}", name="blog_tag")
* @Route("noticias/archive/{year}/{month}", name="blog_archive")
*/
public function listAction(Request $request, $slug = null, $year = null, $month = null)
{
//TODO: Apply request filters like archive an tags
$page = $request->get('page', 1);
$paginator = $this->get('knp_paginator');
$em = $this->get('doctrine.orm.entity_manager');
$query = $em->getRepository(\Uniski\CMSBundle\Entity\Post::class)->createQueryBuilder('p')
->orderBy('p.created', 'desc');
if ($slug != null) {
$query->join('p.tags', 't')
->andWhere('t.slug = :slug')
->setParameter('slug',$slug);
}
if ($year != null) {
$query->andWhere('YEAR(p.created) = :year')
->andWhere('MONTH(p.created) = :month')
->setParameter('year',$year)
->setParameter('month',$month);
}
$posts = $paginator->paginate($query, $page, 10);
return $this->render('blog/list.html.twig', [
'posts' => $posts,
'menu' => 'blog'
]);
}
/**
* @Route("noticias/{slug}", name="show_post")
*/
public function showAction(Post $post)
{
$searchManager = $this->get('app.search_manager');
$offerManager = $this->get('app.offer_manager');
$results = [];
$products = $searchManager->searchProductsByTag($post->getTags());
foreach ($products as $product) {
$results[] = [
'product' => $product,
'minPrice' => $offerManager->calculateMinPrice($product)
];
}
return $this->render('blog/show.html.twig', [
'post' => $post,
'menu' => 'blog',
'results' => $results,
]);
}
public function recentPostsAction()
{
$posts = $this->getDoctrine()->getRepository(\Uniski\CMSBundle\Entity\Post::class)->findBy([],['created' => 'DESC'],5);
return $this->render('blog/block/recent.html.twig', ['posts' => $posts]);
}
public function archivePostsAction()
{
$archive = $this->getDoctrine()->getRepository(\Uniski\CMSBundle\Entity\Post::class)->getArchive();
return $this->render('blog/block/archive.html.twig', ['archive' => $archive]);
}
public function tagsPostsAction()
{
$tags = $this->getDoctrine()->getRepository(\Uniski\CMSBundle\Entity\Post::class)->getTags();
return $this->render('blog/block/tags.html.twig', ['tags' => $tags]);
}
}