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.