> For the complete documentation index, see [llms.txt](https://jjrdev.gitbook.io/luna/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jjrdev.gitbook.io/luna/o-basico/pagination.md).

# Pagination

A paginação de uma listagem é um recurso importante para melhorar a navegação no sistema, com uso da classe `Pagination` o Luna consegue realizar paginação de `arrays` de forma simples e gerar templates para aplicação na view:

```php
namespace App\Controllers\Pages;

use \App\Utils\Pagination;

class Product {
    public static function getProducts($req, $res) {
        // ...
        $pagination = new Pagination($products, $page, $limit);
        $products = $pagination->get();
    }
}
```

A função `get()` retornará um a lista já paginada, quantidade de páginas e outros dados importantes para a paginação.

### Template de paginação

O template para ser adicionado na view pode ser obtido também na classe:

```php
$paginationRender = $pagination->render($req);
```

O retorno conterá uma lista (`<li>`) para que seja adicionada na view e estilizada conforme necessário.

Os componentes utilizados na criação da listagem encontram-se em `/resources/components/pagination` e podem ser personalizados ou alterados na chamada do `render()`:

```php
$paginationRender = $pagination->render($req, [
    'last' => 'last.html'
    // ...
]);
```

{% hint style="info" %}
Caso deseje que algum dos itens seja removido defina o parâmetro como `false`.
{% endhint %}

Caso não envie os componentes os componentes padrão serão utilizados.

Para modificar a quantidade de itens que aparecem ao lado da página atual use:

```php
$paginationRender = $pagination->render($req, [], 3);
```

> **Resultado:** \[1]\[...]\[4]\[5]\[6]**\[7]**\[8]\[9]\[10]\[...]\[99]

{% hint style="info" %}
O `href` dos itens sempre utilizará o parâmetro `page` para definir a página destino.
{% endhint %}

### Inserindo na renderização

Assim como um componente a paginação deve ser adicionada na renderização da view:

```php
$content = View::render('pages/products', ['pagination' => $paginationRender]);

// View: <ul>{{pagination}}</ul>
```
