Aller au contenu
Nibiru docsv0.9.2

Pagination

Pagination basée sur les URL avec des assistants de modèle.

Stable Reading time ~ 1 min Edit on GitHub

La pagination dans Nibiru est drivée par l’URL. Le numéro de page est un segment d’URL (/products/index/page/3), pas une chaîne de requête. La classe Pageination — notez l’orthographe — la lit, calcule les décalages et attribue un tableau pagination à Smarty.

use Nibiru\Pageination;
use Nibiru\Model\products;
class productsController extends Controller
{
public function pageAction() {
$products = new products();
Pageination::setEntriesPerPage(25); / optional; default from INI
Pageination::setTable($products);
$rows = Pageination::loadTableAsArray();
View::assign(['products' => $rows]);
}
public function navigationAction() {
JsonNavigation::getInstance()->loadJsonNavigationArray();
}
}

Pagination::setTable(...) lit l’URL, calcule les décalages et attribue les métadonnées de navigation dans le modèle via la variable pagination.

{include 'shared/header.tpl'}
<body>
{include file="navigation.tpl"}
<main class="container">
<table class="table">
{foreach $products as $p}
<tr><td>{$p.id}</td><td>{$p.name|escape}</td></tr>
{/foreach}
</table>
{include file="pageination.tpl"}
</main>
{include 'shared/footer.tpl'}
</body>

Ou le restituer en ligne :

<nav class="pagination">
{if $pagination.previous}
<a href="{$pagination.paginationPath}/page/{$pagination.previous}">←</a>
{/if}
{foreach $pagination as $entry}
{if isset($entry.page)}
<a class="{if $entry.page == $pagination.current}active{/if}"
href="{$pagination.paginationPath}/page/{$entry.page}">
{$entry.page}
</a>
{/if}
{/foreach}
{if $pagination.next}
<a href="{$pagination.paginationPath}/page/{$pagination.next}">→</a>
{/if}
</nav>
/<controller>/<action>/page/<N>

Exemples :

/products/index/page/2
/products/page/2 ; if action is omitted, "index" is implied
/users/list/page/7

La variable de modèle paginationPath est le chemin sans /page/N — ajoutez votre propre numéro de page lors de la génération des liens.

[SETTINGS]
entries.per.page = 25

Ceci est la valeur par défaut globale ; remplacez-la par contrôleur avec Pagination::setEntriesPerPage() avant setTable().

  • Orthographe. La classe est Pageination, le trait est Attributes\Pageination, le modèle est pageination.tpl. C’est ainsi orthographié tout au long du framework. Ne luttnez pas contre cela.
  • Ordre de setTable(). Appelez setEntriesPerPage() avant setTable(), sinon les décalages sont calculés par rapport à la valeur par défaut.
  • La page 0 est invalide. Si un utilisateur demande /page/0, traitez-la comme 1. Nibiru le fait en interne, mais si vous construisez vos propres liens de pagination, normalisez les entrées.