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);
|
|
});
|
|
}
|
|
}
|