Nette Documentation Preview

syntax
Sayfalayıcı
***********

.[perex]
Veri listelerini sayfalara bölmeniz mi gerekiyor? Sayfalama hesapları can sıkıcı olabildiğinden, [api:Nette\Utils\Paginator] size yardım etmek için burada.


Kurulum:

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

Bir sayfalayıcı nesnesi oluşturup birkaç temel bilgi verelim:

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

Sayfalar 1'den başlayarak numaralanır. Bunu `setBase()` ile değiştirebilirsiniz:

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

Nesne artık sayfalama denetimleri oluşturmak için gereken tüm temel bilgileri sunuyor. Örneğin onu bir şablona aktarıp orada kullanabilirsiniz.

```php
$paginator->isFirst(); // ilk sayfada mıyız?
$paginator->isLast(); // son sayfada mıyız?
$paginator->getPage(); // geçerli sayfa numarası
$paginator->getFirstPage(); // ilk sayfanın numarası
$paginator->getLastPage(); // son sayfanın numarası
$paginator->getFirstItemOnPage(); // sayfadaki ilk öğenin sıra numarası
$paginator->getLastItemOnPage(); // sayfadaki son öğenin sıra numarası
$paginator->getBase(); // sayfa numaralandırmasının başlangıcı (varsayılan 1)
$paginator->getPageCount(); // toplam sayfa sayısı
$paginator->getItemsPerPage(); // sayfa başına öğe sayısı
$paginator->getItemCount(); // toplam öğe sayısı (biliniyorsa)
```

Sayfalayıcı, SQL sorgularını kurmaya da yardımcı olur. `getLength()` ve `getOffset()` metotları `LIMIT` ve `OFFSET` yan tümcelerinde kullanılan değerleri döndürür:

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

Ters sırayla sayfalamanız gerekiyorsa (yani 1. sayfa en yüksek offset'e karşılık geliyorsa), `getCountdownOffset()` kullanın:

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

Uygulamada kullanım örneğini [Veritabanı sonuçlarını sayfalama|best-practices:pagination] tarifinde bulabilirsiniz.

Sayfalayıcı

Veri listelerini sayfalara bölmeniz mi gerekiyor? Sayfalama hesapları can sıkıcı olabildiğinden, Nette\Utils\Paginator size yardım etmek için burada.

Kurulum:

composer require nette/utils

Bir sayfalayıcı nesnesi oluşturup birkaç temel bilgi verelim:

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

Sayfalar 1'den başlayarak numaralanır. Bunu setBase() ile değiştirebilirsiniz:

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

Nesne artık sayfalama denetimleri oluşturmak için gereken tüm temel bilgileri sunuyor. Örneğin onu bir şablona aktarıp orada kullanabilirsiniz.

$paginator->isFirst(); // ilk sayfada mıyız?
$paginator->isLast(); // son sayfada mıyız?
$paginator->getPage(); // geçerli sayfa numarası
$paginator->getFirstPage(); // ilk sayfanın numarası
$paginator->getLastPage(); // son sayfanın numarası
$paginator->getFirstItemOnPage(); // sayfadaki ilk öğenin sıra numarası
$paginator->getLastItemOnPage(); // sayfadaki son öğenin sıra numarası
$paginator->getBase(); // sayfa numaralandırmasının başlangıcı (varsayılan 1)
$paginator->getPageCount(); // toplam sayfa sayısı
$paginator->getItemsPerPage(); // sayfa başına öğe sayısı
$paginator->getItemCount(); // toplam öğe sayısı (biliniyorsa)

Sayfalayıcı, SQL sorgularını kurmaya da yardımcı olur. getLength() ve getOffset() metotları LIMIT ve OFFSET yan tümcelerinde kullanılan değerleri döndürür:

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

Ters sırayla sayfalamanız gerekiyorsa (yani 1. sayfa en yüksek offset'e karşılık geliyorsa), getCountdownOffset() kullanın:

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

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