Système de pagination

Le framework de PHPBoost intègre une classe vous permettant de générer très facilement une pagination complète.

Nous allons voir comment l'utiliser.

Utilisation de la classe ModulePagination



La classe ModulePagination prend plusieurs paramètres :

$pagination = new ModulePagination($current_page, $number_elements, $number_items_per_page, $type = Pagination::FULL_PAGINATION);




Prenons un exemple :

Code PHP :
// On compte le nombre d'éléments dans votre base de données
$number_items = PersistenceContext::get_querier()->count('votre_table');
// On récupère le numéro de page courante et on lui donne la valeur de 1 si elle n'est pas définie
$current_page = AppContext::get_request()->get_getint('page', 1);
// On initialise la classe pagination avec les différents paramètres
$pagination = new ModulePagination($current_page, $number_items, 20);


Vous allez ensuite pouvoir utiliser les fonctions de la classe pour afficher la pagination, récupérer le numéro de la page, ...

Liste des fonctions disponible



Définir l'url de la pagination



Code PHP :
$pagination->set_url(PATH_TO_ROOT . '/votre_module/votre_page.php?page=%d');


La classe va s'occuper de remplacer %d par le numéro de page.

Afficher la pagination



La fonction display va renvoyer le code HTML de la pagination. Créez une variable TPL ou utiliser un echo :

Code PHP :
echo $pagination->display();


Récupérer le nombre d'éléments par page



C'est celui que vous avez défini en troisième paramètre.

Pour le récupérer :
Code PHP :
$pagination->get_number_items_per_page();


Savoir si la page actuelle possède des éléments ou non



Vous pouvez savoir si la page actuelle possède ou non des éléments pour renvoyer une erreur 404 par la suite comme ceci :

Code PHP :
if ($pagination->current_page_is_empty() && $page > 1)
{
    $error_controller = PHPBoostErrors::unexisting_page();
    DispatchManager::redirect($error_controller);
}


Savoir s'il y a besoin de la pagination ou non



Vous pouvez utiliser la fonction has_several_pages() pour savoir si vous devez ou non afficher la pagination dans votre page. En effet, la pagination n'est pas utile s'il n'y a qu'une page à afficher ...

Code PHP :
$pagination->has_several_pages();


Récupérer le nombre de pages



Pour le récupérer :
Code PHP :
$pagination->get_number_pages();


Récupérer le nombre à partir duquel vous devez récupérer les éléments en base de données



Selon la page demandée, vous n'allez pas afficher les mêmes éléments. Pour connaitre à partir de quel élément vous devez récupérer vos articles par exemple, il faut s'aider de cette fonction :

Code PHP :
$pagination->get_display_from();