Paginator

Bir veri listesini sayfalandırmanız mı gerekiyor? Sayfalandırmanın arkasındaki matematik zor olabileceğinden, Nette\Utils\Paginator size yardımcı olacaktır.

Kurulum:

composer require nette/utils

Bir sayfalama nesnesi oluşturalım ve bunun için temel bilgileri ayarlayalım:

$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // geçerli sayfanın numarası (1'den itibaren numaralandırılır)
$paginator->setItemsPerPage(30); // sayfa başına kayıt sayısı
$paginator->setItemCount(356); // toplam kayıt sayısı (varsa)

Sayfalar 1'den itibaren numaralandırılır. setBase() adresini kullanarak bunu değiştirebiliriz:

$paginator->setBase(0); // 0'dan itibaren numaralandırılır

Nesne artık bir sayfalayıcı oluşturmada yararlı olan tüm temel bilgileri sağlayacaktır. Örneğin, bunu bir şablona aktarabilir ve orada kullanabilirsiniz.

$paginator->isFirst(); // bu ilk sayfa mı?
$paginator->isLast(); // bu son sayfa mı?
$paginator->getPage(); // geçerli sayfa numarası
$paginator->getFirstPage(); // ilk sayfa numarası
$paginator->getLastPage(); // son sayfa numarası
$paginator->getFirstItemOnPage(); // sayfadaki ilk öğenin sıra numarası
$paginator->getLastItemOnPage(); // sayfadaki son öğenin sıra numarası
$paginator->getPageIndex(); // 0'dan itibaren numaralandırılmışsa geçerli sayfa numarası
$paginator->getPageCount(); // toplam sayfa sayısı
$paginator->getItemsPerPage(); // sayfa başına kayıt sayısı
$paginator->getItemCount(); // toplam kayıt sayısı (varsa)

Sayfalandırıcı SQL sorgusunun formüle edilmesine yardımcı olacaktır. getLength() ve getOffset() yöntemleri LIMIT ve OFFSET cümlelerinde kullanabileceğiniz değerleri döndürür:

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

Ters sırada sayfalandırmanız gerekiyorsa, yani sayfa no. 1 en yüksek ofsete karşılık gelir, getCountdownOffset() adresini kullanabilirsiniz:

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

Uygulamadaki bir kullanım örneği Veritabanı Sonuçlarını Sayfalandırma adlı yemek kitabında bulunabilir.