-
Notifications
You must be signed in to change notification settings - Fork 0
PaginationTool
Le PaginationTool est un utilitaire conçu pour automatiser la pagination des résultats de recherche. Il travaille en étroite collaboration avec le QueryBuilder pour extraire les données tout en calculant intelligemment le nombre total de pages disponibles.
Namespace : Magepattern\Component\Tool\PaginationTool
Le Tool utilise le clonage d'objet pour réaliser deux actions en une seule passe :
Comptage optimisé : Il clone le QueryBuilder, nettoie les colonnes, les tris (ORDER BY) et les limites pour exécuter un COUNT(*) ultra-rapide.
Découpage des données : Il injecte les clauses LIMIT et OFFSET appropriées dans votre QueryBuilder original.
Voici comment intégrer la pagination dans une méthode de récupération de données (Layer ou Model) :
use Magepattern\Component\Database\QueryBuilder;
use Magepattern\Component\Database\Layer;
use Magepattern\Component\Tool\PaginationTool;
public function getProducts(int $page = 1, int $limit = 20): array
{
// 1. Définir la requête de base (sans limites)
$qb = (new QueryBuilder())
->select(['p.id_product', 'p.price_p', 'pc.name_p'])
->from('mc_catalog_product', 'p')
->join('mc_catalog_product_content', 'pc', 'p.id_product = pc.id_product')
->where('pc.published_p = 1')
->orderBy('p.id_product', 'DESC');
// 2. Initialiser le PaginationTool
$pager = new PaginationTool($limit, $page);
// 3. Appliquer la pagination (Modifie $qb par référence et retourne les métadonnées)
$pagination = $pager->paginate($qb);
// 4. Récupérer les données
$data = Layer::getInstance()->fetchAll($qb->getSql(), $qb->getParams());
return [
'items' => $data ?: [],
'pagination' => $pagination
];
}Exemple simple :
// 1. Initialisation
$qb = (new QueryBuilder())->select('*')->from('mc_cms_page');
// 2. Filtrage via DateTool
$date = DateTool::toSql('19/02/2026');
$qb->where('date_register LIKE :d', ['d' => "%$date%"]);
// 3. Pagination & Fetch
$meta = (new PaginationTool(10, 1))->paginate($qb);
$data = Layer::getInstance()->fetchAll($qb->getSql(), $qb->getParams());La méthode paginate() retourne un tableau associatif indispensable pour construire votre interface (UI) :
| Clé | Type | Description |
|---|---|---|
| total_items | int | Nombre total d'enregistrements en base (ex: 450). |
| total_pages | int | Nombre total de pages calculé (ex: 23). |
| current_page | int | La page actuellement consultée. |
| items_per_page | int | La limite définie (par défaut 20). |
| offset | int | L'index de départ calculé pour SQL. |
Clonage automatique : Vous n'avez pas besoin de cloner votre QueryBuilder manuellement, le Tool le fait déjà en interne pour la requête de comptage.
Performance : Grâce à l'utilisation de clearSelect() et clearOrderBy(), la requête de comptage est optimisée pour ne pas solliciter inutilement les index de tri du serveur SQL.
Sécurité : L'offset et la limite sont castés en entiers pour éviter toute faille.