/
paginator.texy
65 lines (50 loc) · 2.51 KB
/
paginator.texy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
Paginateur
**********
.[perex]
Vous avez besoin de paginer une liste de données ? Parce que les mathématiques derrière la pagination peuvent être délicates, [api:Nette\Utils\Paginator] vous aidera.
Installation :
```shell
composer require nette/utils
```
Nous allons créer un objet de pagination et définir les informations de base pour celui-ci :
```php
$paginator = new Nette\Utils\Paginator;
$paginator->setPage(1); // le numéro de la page actuelle (numéroté à partir de 1)
$paginator->setItemsPerPage(30); // le nombre d'enregistrements par page
$paginator->setItemCount(356); // le nombre total d'enregistrements (si disponible)
```
Les pages sont numérotées à partir de 1. Nous pouvons les modifier en utilisant `setBase()`:
```php
$paginator->setBase(0); // numéroté à partir de 0
```
L'objet va maintenant fournir toutes les informations de base utiles à la création d'un paginateur. Vous pouvez, par exemple, le passer à un modèle et l'y utiliser.
```php
$paginator->isFirst(); // s'agit-il de la première page ?
$paginator->isLast(); // s'agit-il de la dernière page ?
$paginator->getPage(); // numéro de la page actuelle
$paginator->getFirstPage(); // le numéro de la première page
$paginator->getLastPage(); // le numéro de la dernière page
$paginator->getFirstItemOnPage(); // numéro d'ordre du premier élément de la page
$paginator->getLastItemOnPage(); // numéro de séquence du dernier élément de la page
$paginator->getPageIndex(); // numéro de la page actuelle si elle est numérotée à partir de 0
$paginator->getPageCount(); // le nombre total de pages
$paginator->getItemsPerPage(); // le nombre d'enregistrements par page
$paginator->getItemCount(); // le nombre total d'enregistrements (si disponible)
```
Le paginateur vous aidera à formuler la requête SQL. Les méthodes `getLength()` et `getOffset()` renvoient les valeurs que vous pouvez utiliser dans les clauses LIMIT et OFFSET :
```php
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getOffset(),
);
```
Si vous avez besoin de paginer dans l'ordre inverse, c'est-à-dire que la page no. 1 correspond au décalage le plus élevé, vous pouvez utiliser `getCountdownOffset()`:
```php
$result = $database->query(
'SELECT * FROM items LIMIT ? OFFSET ?',
$paginator->getLength(),
$paginator->getCountdownOffset(),
);
```
Un exemple d'utilisation dans l'application se trouve dans le livre de recettes [Pagination des résultats de la base de données |best-practices:pagination].