52 lines
1.2 KiB
PHP
52 lines
1.2 KiB
PHP
|
<?php
|
||
|
namespace Framework\Twig;
|
||
|
|
||
|
use Framework\Router;
|
||
|
use Pagerfanta\Pagerfanta;
|
||
|
use Pagerfanta\View\TwitterBootstrap4View;
|
||
|
|
||
|
class PagerFantaExtension extends \Twig_Extension
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* @var Router
|
||
|
*/
|
||
|
private $router;
|
||
|
|
||
|
public function __construct(Router $router)
|
||
|
{
|
||
|
$this->router = $router;
|
||
|
}
|
||
|
|
||
|
public function getFunctions()
|
||
|
{
|
||
|
return [
|
||
|
new \Twig_SimpleFunction('paginate', [$this, 'paginate'], ['is_safe' => ['html']])
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Génère la pagination
|
||
|
* @param Pagerfanta $paginatedResults
|
||
|
* @param string $route
|
||
|
* @param array $routerParams
|
||
|
* @param array $queryArgs
|
||
|
* @return string
|
||
|
*/
|
||
|
public function paginate(
|
||
|
Pagerfanta $paginatedResults,
|
||
|
string $route,
|
||
|
array $routerParams = [],
|
||
|
array $queryArgs = []
|
||
|
): string {
|
||
|
|
||
|
$view = new TwitterBootstrap4View();
|
||
|
return $view->render($paginatedResults, function (int $page) use ($route, $routerParams, $queryArgs) {
|
||
|
if ($page > 1) {
|
||
|
$queryArgs['p'] = $page;
|
||
|
}
|
||
|
return $this->router->generateUri($route, $routerParams, $queryArgs);
|
||
|
});
|
||
|
}
|
||
|
}
|