Pagine la liste des news récentes
This commit is contained in:
@@ -11,9 +11,9 @@ $loader->register();
|
|||||||
$security = new \Silex\Controller\SecurityController();
|
$security = new \Silex\Controller\SecurityController();
|
||||||
$user = new \Silex\Controller\UserController();
|
$user = new \Silex\Controller\UserController();
|
||||||
$router = new Router($_SERVER['REQUEST_URI']);
|
$router = new Router($_SERVER['REQUEST_URI']);
|
||||||
$router->setBasePath("~cofrizot/silex/index.php");
|
|
||||||
$router->get('/^$/', [$user, 'index']);
|
$router->get('/^$/', [$user, 'index']);
|
||||||
$router->get('/^news\/(?<id>[\w-]+)$/', [$user, 'viewPost']);
|
$router->get('/^recent\/(?<page>\d+)$/', [$user, 'index']);
|
||||||
|
$router->get('/^news\/(?<id>\d+)$/', [$user, 'viewPost']);
|
||||||
$router->get('/^comments\/(?<id>[\w-]+)$/', [$user, 'viewPostComments']);
|
$router->get('/^comments\/(?<id>[\w-]+)$/', [$user, 'viewPostComments']);
|
||||||
$router->match('/^login$/', [$security, 'login']);
|
$router->match('/^login$/', [$security, 'login']);
|
||||||
$router->run(new \Silex\DI\DI($router))->render(__DIR__ . '/../' . VIEW_PATH);
|
$router->run(new \Silex\DI\DI($router))->render(__DIR__ . '/../' . VIEW_PATH);
|
||||||
|
@@ -6,13 +6,21 @@ namespace Silex\Controller;
|
|||||||
|
|
||||||
use Silex\DI\DI;
|
use Silex\DI\DI;
|
||||||
use Silex\Http\HttpResponse;
|
use Silex\Http\HttpResponse;
|
||||||
|
use Silex\Util\Pagination;
|
||||||
|
|
||||||
class UserController
|
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();
|
$gw = $di->getNewsGateway();
|
||||||
return new HttpResponse(200, 'home', ['news' => $news]);
|
|
||||||
|
$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
|
public function viewPost(DI $di, array $params): HttpResponse
|
||||||
|
@@ -37,6 +37,15 @@ class NewsGateway
|
|||||||
return $news;
|
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
|
public function getById(int $id): News
|
||||||
{
|
{
|
||||||
$req = $this->pdo->prepare('SELECT * FROM news WHERE id_news=:id;');
|
$req = $this->pdo->prepare('SELECT * FROM news WHERE id_news=:id;');
|
||||||
|
13
src/Silex/Util/Pagination.php
Normal file
13
src/Silex/Util/Pagination.php
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Silex\Util;
|
||||||
|
|
||||||
|
final class Pagination
|
||||||
|
{
|
||||||
|
public static function getNbPages(int $nbItems, int $perPage): int
|
||||||
|
{
|
||||||
|
return intval(ceil($nbItems / $perPage));
|
||||||
|
}
|
||||||
|
}
|
@@ -14,3 +14,46 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<?php endforeach ?>
|
<?php endforeach ?>
|
||||||
|
<nav class="pagination" role="navigation" aria-label="pagination">
|
||||||
|
<?php if ($params['page'] > 1) : ?>
|
||||||
|
<a class="pagination-previous" href="<?= $params['router']->url('recent/' . ($params['page'] - 1)) ?>">Previous</a>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($params['page'] < $params['nbPages']) : ?>
|
||||||
|
<a class="pagination-next" href="<?= $params['router']->url('recent/' . ($params['page'] + 1)) ?>">Next page</a>
|
||||||
|
<?php endif; ?>
|
||||||
|
<ul class="pagination-list">
|
||||||
|
<?php if ($params['page'] > 2) : ?>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page 1" href="<?= $params['router']->url('recent/1') ?>">1</a>
|
||||||
|
</li>
|
||||||
|
<?php if ($params['page'] > 3) : ?>
|
||||||
|
<li>
|
||||||
|
<span class="pagination-ellipsis">…</span>
|
||||||
|
</li>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($params['page'] > 1) : ?>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page <?= $params['page'] - 1 ?>" href="<?= $params['router']->url('recent/' . ($params['page'] - 1)) ?>"><?= $params['page'] - 1 ?></a>
|
||||||
|
</li>
|
||||||
|
<?php endif; ?>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link is-current" aria-label="Page <?= $params['page'] ?>" aria-current="page"><?= $params['page'] ?></a>
|
||||||
|
</li>
|
||||||
|
<?php if ($params['page'] < ($params['nbPages'] - 1)) : ?>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page <?= $params['page'] + 1 ?>" href="<?= $params['router']->url('recent/' . ($params['page'] + 1)) ?>"><?= $params['page'] + 1 ?></a>
|
||||||
|
</li>
|
||||||
|
<?php if ($params['page'] < ($params['nbPages'] - 2)) : ?>
|
||||||
|
<li>
|
||||||
|
<span class="pagination-ellipsis">…</span>
|
||||||
|
</li>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php if ($params['page'] < $params['nbPages']) : ?>
|
||||||
|
<li>
|
||||||
|
<a class="pagination-link" aria-label="Goto page <?= $params['nbPages'] ?>" href="<?= $params['router']->url('recent/' . $params['nbPages']) ?>"><?= $params['nbPages'] ?></a>
|
||||||
|
</li>
|
||||||
|
<?php endif; ?>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
Reference in New Issue
Block a user