Paginator

Veri listesini sayfalamanız mı gerekiyor? Sayfalama matematiği yanıltıcı olabileceğinden, Nette\Utils\Paginator size yardımcı olacaktır.

Kurulum:

composer require nette/utils 

Bir sayfalayıcı nesnesi oluşturalım ve temel bilgileri ayarlayalım:

$paginator = new Nette\Utils\Paginator; $paginator->setPage(1); // mevcut sayfa numarası $paginator->setItemsPerPage(30); // sayfa başına öğe sayısı $paginator->setItemCount(356); // toplam öğe sayısı (biliniyorsa) 

Sayfalar 1'den başlar. Bunu setBase() kullanarak değiştirebiliriz:

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

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

$paginator->isFirst(); // ilk sayfada mıyız? $paginator->isLast(); // son sayfada mıyız? $paginator->getPage(); // mevcut 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 başlayan mevcut sayfa numarası $paginator->getPageCount(); // toplam sayfa sayısı $paginator->getItemsPerPage(); // sayfa başına öğe sayısı $paginator->getItemCount(); // toplam öğe sayısı (biliniyorsa) 

Sayfalayıcı, SQL sorgusu oluştururken yardımcı olur. getLength() ve getOffset() metotları, LIMIT ve OFFSET yan tümcelerinde kullanacağımız değerleri döndürür:

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

Ters sırada sayfalamamız gerekiyorsa, yani sayfa no. 1 en yüksek ofsete karşılık geliyorsa, getCountdownOffset() kullanırız:

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

Uygulamada kullanım örneğini Veritabanı sonuçlarını sayfalama tarifinde bulabilirsiniz.

versiyon: 4.0