Zum Inhalt springen
Nibiru docsv0.9.2

Seitennummerierung

URL-basierte Paginierung mit Vorlagenhilfsprogrammen.

Stable Reading time ~ 1 min Edit on GitHub

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.

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.

{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:

<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>

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.

[SETTINGS]
entries.per.page = 25

Dies ist die globale Standardeinstellung; überschreiben Sie sie pro Controller mit Pageination::setEntriesPerPage() vor setTable().

  • 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.