From 2c8e49e5602021e352286db9563208f981060653 Mon Sep 17 00:00:00 2001 From: clfreville2 Date: Wed, 30 Nov 2022 10:45:06 +0100 Subject: [PATCH] =?UTF-8?q?Pagine=20la=20liste=20des=20news=20r=C3=A9cente?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/index.php | 4 +-- src/Silex/Controller/UserController.php | 14 ++++++-- src/Silex/Gateway/NewsGateway.php | 9 +++++ src/Silex/Util/Pagination.php | 13 +++++++ views/home.php | 45 ++++++++++++++++++++++++- 5 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 src/Silex/Util/Pagination.php diff --git a/public/index.php b/public/index.php index ab2914a..e5fd097 100644 --- a/public/index.php +++ b/public/index.php @@ -11,9 +11,9 @@ $loader->register(); $security = new \Silex\Controller\SecurityController(); $user = new \Silex\Controller\UserController(); $router = new Router($_SERVER['REQUEST_URI']); -$router->setBasePath("~cofrizot/silex/index.php"); $router->get('/^$/', [$user, 'index']); -$router->get('/^news\/(?[\w-]+)$/', [$user, 'viewPost']); +$router->get('/^recent\/(?\d+)$/', [$user, 'index']); +$router->get('/^news\/(?\d+)$/', [$user, 'viewPost']); $router->get('/^comments\/(?[\w-]+)$/', [$user, 'viewPostComments']); $router->match('/^login$/', [$security, 'login']); $router->run(new \Silex\DI\DI($router))->render(__DIR__ . '/../' . VIEW_PATH); diff --git a/src/Silex/Controller/UserController.php b/src/Silex/Controller/UserController.php index cddb4c6..194a3bd 100644 --- a/src/Silex/Controller/UserController.php +++ b/src/Silex/Controller/UserController.php @@ -6,13 +6,21 @@ namespace Silex\Controller; use Silex\DI\DI; use Silex\Http\HttpResponse; +use Silex\Util\Pagination; class UserController { - public function index(DI $di): HttpResponse + private const PER_PAGE = 12; + + public function index(DI $di, array $params): HttpResponse { - $news = $di->getNewsGateway()->getPaginatedRecentNews(); - return new HttpResponse(200, 'home', ['news' => $news]); + $gw = $di->getNewsGateway(); + + $page = intval($params['page'] ?? 1); + $total = $gw->getCount(); + $nbPages = Pagination::getNbPages($total, self::PER_PAGE); + $news = $gw->getPaginatedRecentNews($page , self::PER_PAGE); + return new HttpResponse(200, 'home', ['news' => $news, 'page' => $page, 'nbPages' => $nbPages, 'router' => $di->getRouter()]); } public function viewPost(DI $di, array $params): HttpResponse diff --git a/src/Silex/Gateway/NewsGateway.php b/src/Silex/Gateway/NewsGateway.php index 4986614..eff7560 100644 --- a/src/Silex/Gateway/NewsGateway.php +++ b/src/Silex/Gateway/NewsGateway.php @@ -37,6 +37,15 @@ class NewsGateway return $news; } + public function getCount(): int + { + $req = $this->pdo->query('SELECT COUNT(*) nb FROM news;'); + if ($req === false) { + return 0; + } + return intval($req->fetch()['nb']); + } + public function getById(int $id): News { $req = $this->pdo->prepare('SELECT * FROM news WHERE id_news=:id;'); diff --git a/src/Silex/Util/Pagination.php b/src/Silex/Util/Pagination.php new file mode 100644 index 0000000..09efe4d --- /dev/null +++ b/src/Silex/Util/Pagination.php @@ -0,0 +1,13 @@ + - \ No newline at end of file + + \ No newline at end of file