---
title: "Seitennummerierung"
description: "URL-basierte Paginierung mit Vorlagenhilfsprogrammen."
---

Die Paginierung in Nibiru ist **URL-gesteuert**. Die Seitenzahl ist ein URL-Segment (`/products/index/page/3`), kein Abfragezeichenfolgen-Parameter. Die Klasse `Pageination` – achten Sie auf die Rechtschreibung – liest es, berechnet Offsets und weist ein `pagination`-Array in Smarty zu.

## Verbinden Sie es ein
```php
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(...)` liest die URL, berechnet Offsets und weist die Navigationsmetadaten über die Variable `pagination` dem Template zu.

## Rendern im Template
```smarty
{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>
```
Oder rendern Sie inline:
```smarty
<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>
```
## URL-Format
```
/<controller>/<action>/page/<N>
```
Beispiele:
```
/products/index/page/2
/products/page/2          ; if action is omitted, "index" is implied
/users/list/page/7
```
Die `paginationPath` Vorlagenvariable ist der Pfad *ohne* `/page/N` — fügen Sie Ihre eigene Seitenzahl hinzu, wenn Sie Links generieren.

## Konfiguration
```ini
[SETTINGS]
entries.per.page = 25
```
Dies ist die globale Standardeinstellung; überschreiben Sie sie pro Controller mit `Pageination::setEntriesPerPage()` vor `setTable()`.

## Häufige Fallen

- **Rechtschreibung.** Die Klasse heißt `Pageination`, das Trait heißt `Attributes\Pageination`, die Vorlage heißt `pageination.tpl`. Es wird auf diese Weise in der gesamten Frameworks geschrieben. Streiten Sie sich nicht damit.
- **`setTable()` Reihenfolge.** Rufen Sie `setEntriesPerPage()` *vor* `setTable()` auf, andernfalls werden die Offsets gegen den Standard berechnet.
- **Seite 0 ist ungültig.** Wenn ein Benutzer `/page/0` anfordert, behandeln Sie es als `1`. Nibiru macht dies intern, aber wenn Sie eigene Paginierungslinks erstellen, normalisieren Sie die Eingaben.
