<?php
namespace App\Controller;
use App\Services\BlogReader;
use App\Services\SiteConfig;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
class BlogController extends AbstractController {
private BlogReader $blogReader;
private SiteConfig $config;
function __construct(SiteConfig $config, BlogReader $blogReader) {
$this->blogReader = $blogReader;
$this->config = $config;
}
function index(int $page ): Response {
$postCount = $this->blogReader->postCount();
$PAGE_LINKS = 5;
$pageCount = ceil($postCount / $this->config->getBlogIndexPageSize() );
$pages = [];
if($page > 1) {
$pages[] = ['<<', $this->generateUrl('blog', ['page' => strval(1)]) , ''] ;
$pages[] = ['<' , $this->generateUrl('blog', ['page' => strval($page-1)]), ''];
}
/* V
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5
|<--- 5 --->|
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5
|<--- 5 --->|
*/
$pagerMiddle = ceil($PAGE_LINKS/2); /*pagerLinks = 5; $pagerMiddle = 3; pageLinks = 6; $pagerMiddle = 3; */
// 3
$p = ($page <= $pagerMiddle) ? 1 : ($page - $pagerMiddle + 1);
for($i = 0; $i < $PAGE_LINKS && $p <= $pageCount; ++$i, $p++) {
$classes = ($p == $page) ? 'current' : '';
$pages[] = [ strval($p), $this->generateUrl('blog', ['page' => strval($p) ]), $classes];
}
if ($page < $pageCount) {
$pages[] = ['>', $this->generateUrl('blog', ['page' => strval($page+1)]) , ''];
$pages[] = ['>>', $this->generateUrl('blog', ['page' => strval($pageCount)]), ''];
}
$posts = $this->blogReader->getExcerpts($page, $this->config->getBlogIndexPageSize());
$contents = $this->renderView( "default/blog.index.html.twig", [
'posts' => $posts,
'pages' => $pages,
'pageCount' => $pageCount,
]);
return new Response($contents);
}
function post(string $slug ): Response {
$contents = $this->renderView( "default/blog.post.html.twig", [
'post' => $posts = $this->blogReader->getPostbySlug($slug)
]);
return new Response($contents);
}
}