Pagination
Pagination basée sur les URL avec des assistants de modèle.
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.
Lier les éléments
Section intitulée « Lier les éléments »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.
Rendu dans le modèle
Section intitulée « Rendu dans le modèle »{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>Format d’URL
Section intitulée « Format d’URL »/<controller>/<action>/page/<N>Exemples :
/products/index/page/2/products/page/2 ; if action is omitted, "index" is implied/users/list/page/7La 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.
Configuration
Section intitulée « Configuration »[SETTINGS]entries.per.page = 25Ceci est la valeur par défaut globale ; remplacez-la par contrôleur avec Pagination::setEntriesPerPage() avant setTable().
Tracas courantes
Section intitulée « Tracas courantes »- Orthographe. La classe est
Pageination, le trait estAttributes\Pageination, le modèle estpageination.tpl. C’est ainsi orthographié tout au long du framework. Ne luttnez pas contre cela. - Ordre de
setTable(). AppelezsetEntriesPerPage()avantsetTable(), 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 comme1. Nibiru le fait en interne, mais si vous construisez vos propres liens de pagination, normalisez les entrées.