コンテンツにスキップ
Nibiru docsv0.9.2

ページネーション

テンプレートヘルパーを使用したURLドリブンのページネーション。

Stable Reading time ~ 1 min Edit on GitHub

Nibiru のページネーションは URL ドリブン です。ページ番号は URL セグメント (/products/index/page/3) であり、クエリストリングではありません。Pageination クラス — 拼写に注意 — がそれを読み取り、オフセットを計算し、pagination 配列を 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(...) は、URL を読み取り、オフセットを計算し、ナビゲーションのメタデータをテンプレートに pagination 変数を通じて割り当てます。

テンプレートでのレンダリング

Section titled “テンプレートでのレンダリング”
{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>

またはインラインでレンダリングします:

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

例:

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

テンプレート変数 paginationPath は、/page/N なし のパスです。リンクを生成する際には、ページ番号を自分で追加してください。

[SETTINGS]
entries.per.page = 25

これはグローバルなデフォルトです;Pageination::setEntriesPerPage()setTable() の前にコントローラごとにオーバーライドしてください。

  • スペリング。 クラスは Pageination、トレイトは Attributes\Pageination、テンプレートは pageination.tpl です。フレームワーク全体でこのように記述されています。これに抵抗しないでください。
  • setTable() の順序。 setEntriesPerPage()setTable() の前に 呼び出すようにしてください。それ以外の場合、オフセットはデフォルトに対して計算されます。
  • ページ0は無効です。 ユーザーが /page/0 を要求した場合、それを 1 として扱います。Nibiru は内部でこれを行いますが、独自のページネーションリンクを構築する場合は、入力を正規化してください。