Nette Documentation Preview

syntax
Paginator
*********

.[perex]
データリストをページ分割する必要がありますか?ページネーションの計算は厄介な場合があるため、[api:Nette\Utils\Paginator] が役立ちます。


インストール:

```shell
composer require nette/utils
```

ページネータオブジェクトを作成し、基本情報を設定します:

```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // 現在のページ番号
$paginator->setItemsPerPage(30); // ページあたりのアイテム数
$paginator->setItemCount(356); // 合計アイテム数(わかっている場合)
```

ページは1から番号付けされます。これは `setBase()` を使用して変更できます:

```php
$paginator->setBase(0); // 0から番号付けします
```

オブジェクトは、ページネータを作成する際に役立つすべての基本情報を提供します。例えば、テンプレートに渡してそこで使用できます。

```php
$paginator->isFirst(); // 最初のページですか?
$paginator->isLast(); // 最後のページですか?
$paginator->getPage(); // 現在のページ番号
$paginator->getFirstPage(); // 最初のページ番号
$paginator->getLastPage(); // 最後のページ番号
$paginator->getFirstItemOnPage(); // ページ上の最初のアイテムのシーケンス番号
$paginator->getLastItemOnPage(); // ページ上の最後のアイテムのシーケンス番号
$paginator->getPageIndex(); // 0から始まる現在のページ番号
$paginator->getPageCount(); // 合計ページ数
$paginator->getItemsPerPage(); // ページあたりのアイテム数
$paginator->getItemCount(); // 合計アイテム数(わかっている場合)
```

ページネータはSQLクエリの作成に役立ちます。`getLength()` と `getOffset()` メソッドは、LIMITおよびOFFSET句で使用する値を返します:

```php
$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getOffset(),
);
```

逆順でページ分割する必要がある場合、つまりページ番号1が最大のオフセットに対応する場合、`getCountdownOffset()` を使用します:

```php
$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getCountdownOffset(),
);
```

アプリケーションでの使用例は、クックブック [データベース結果のページ分割 |best-practices:pagination] にあります。

Paginator

データリストをページ分割する必要がありますか?ページネーションの計算は厄介な場合があるため、Nette\Utils\Paginator が役立ちます。

インストール:

composer require nette/utils

ページネータオブジェクトを作成し、基本情報を設定します:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // 現在のページ番号
$paginator->setItemsPerPage(30); // ページあたりのアイテム数
$paginator->setItemCount(356); // 合計アイテム数(わかっている場合)

ページは1から番号付けされます。これは setBase() を使用して変更できます:

$paginator->setBase(0); // 0から番号付けします

オブジェクトは、ページネータを作成する際に役立つすべての基本情報を提供します。例えば、テンプレートに渡してそこで使用できます。

$paginator->isFirst(); // 最初のページですか?
$paginator->isLast(); // 最後のページですか?
$paginator->getPage(); // 現在のページ番号
$paginator->getFirstPage(); // 最初のページ番号
$paginator->getLastPage(); // 最後のページ番号
$paginator->getFirstItemOnPage(); // ページ上の最初のアイテムのシーケンス番号
$paginator->getLastItemOnPage(); // ページ上の最後のアイテムのシーケンス番号
$paginator->getPageIndex(); // 0から始まる現在のページ番号
$paginator->getPageCount(); // 合計ページ数
$paginator->getItemsPerPage(); // ページあたりのアイテム数
$paginator->getItemCount(); // 合計アイテム数(わかっている場合)

ページネータはSQLクエリの作成に役立ちます。getLength()getOffset() メソッドは、LIMITおよびOFFSET句で使用する値を返します:

$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getOffset(),
);

逆順でページ分割する必要がある場合、つまりページ番号1が最大のオフセットに対応する場合、getCountdownOffset() を使用します:

$result = $database->query(
	'SELECT * FROM items LIMIT ? OFFSET ?',
	$paginator->getLength(),
	$paginator->getCountdownOffset(),
);

アプリケーションでの使用例は、クックブック データベース結果のページ分割 にあります。