Paginación
Paginación basada en URL con ayudantes de plantilla.
La paginación en Nibiru es URL-driven. El número de página es un segmento de URL (/products/index/page/3), no una cadena de consulta. La clase Pageination — nota la ortografía — lo lee, calcula los desplazamientos y asigna un array pagination a Smarty.
Conectarlo
Sección titulada «Conectarlo»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(); }}Pageination::setTable(...) lee la URL, calcula los desplazamientos y asigna los metadatos de navegación a la plantilla mediante la variable pagination.
Renderizado en la plantilla
Sección titulada «Renderizado en la plantilla»{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>O bien renderiza en línea:
<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>Formato de URL
Sección titulada «Formato de URL»/<controller>/<action>/page/<N>Ejemplos:
/products/index/page/2/products/page/2 ; if action is omitted, "index" is implied/users/list/page/7La variable de plantilla paginationPath es la ruta sin /page/N — anexa tu propio número de página al generar enlaces.
Configuración
Sección titulada «Configuración»[SETTINGS]entries.per.page = 25Este es el valor predeterminado global; sobrescribe por controlador con Pageination::setEntriesPerPage() antes de setTable().
Trucos comunes
Sección titulada «Trucos comunes»- Ortografía. La clase es
Pageination, el rasgo (trait) esAttributes\Pageination, la plantilla espageination.tpl. Está escrito así a lo largo del framework. No luches contra ello. - Orden de
setTable(). Llama asetEntriesPerPage()antes quesetTable(), de lo contrario, los desplazamientos se calculan en función del valor predeterminado. - La página 0 es inválida. Si un usuario solicita
/page/0, trátalo como1. Nibiru lo hace internamente, pero si construyes tus propios enlaces de paginación, normaliza las entradas.