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