Ir al contenido
Nibiru docsv0.9.2

Paginación

Paginación basada en URL con ayudantes de plantilla.

Stable Reading time ~ 1 min Edit on GitHub

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.

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.

{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>
/<controller>/<action>/page/<N>

Ejemplos:

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

La variable de plantilla paginationPath es la ruta sin /page/N — anexa tu propio número de página al generar enlaces.

[SETTINGS]
entries.per.page = 25

Este es el valor predeterminado global; sobrescribe por controlador con Pageination::setEntriesPerPage() antes de setTable().

  • Ortografía. La clase es Pageination, el rasgo (trait) es Attributes\Pageination, la plantilla es pageination.tpl. Está escrito así a lo largo del framework. No luches contra ello.
  • Orden de setTable(). Llama a setEntriesPerPage() antes que setTable(), 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 como 1. Nibiru lo hace internamente, pero si construyes tus propios enlaces de paginación, normaliza las entradas.