V. Développer avec PHPBoost

Système de pagination

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Dernière mise à jour : 26/11/2012 à 11h49
Dans le framework de PHPBoost, une classe vous permet de gérer la pagination dans vos développements, elle se nomme Pagination.

Nous allons voir comment l'utiliser.

Le constructeur de la classe prend deux paramètres :

Pagination($nb_pages, $current_page)


Le premier paramètre demande le nombre de pages totales et le deuxième la page où vous êtes actuellement.

Vous devez également définir par la suite l'url à travers la fonction
set_url_sprintf_pattern($url_pattern)
ou
set_url_builder_callback($callback)
.

Je vais vous montrer deux cas d'utilisation de cette classe selon vos méthode de développement :


Dans une page PHP classique



Code PHP :
// On compte le nombre d'éléments dans votre base de données
$number_items = PersistenceContext::get_querier()->count('votre_table');
// On calcule le nombre de page qu'il va y a voir selon vos éléments et le nombre que vous souhaitez afficher, 15 éléments dans ce cas là
$number_pages = ceil($number_items / 15);
// 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 Pagination($number_pages, $current_page);
// On défini l'url de redirection
$pagination->set_url_sprintf_pattern(PATH_TO_ROOT . '/votre_module/votre_page.php?page=%d');
// On affiche la pagination
echo $pagination->export();


En Orienté Objet



Code PHP :
<?php
class UserUsersListPagination
{
    private $pagination;
    private $current_page;
    private $number_users_per_page = 15;
 
    public function __construct($current_page)
    {
        $this->current_page = $current_page;
        $this->pagination = new Pagination($this->get_number_pages(), $this->current_page);
    }
 
    public function set_url($field, $sort)
    {
        $this->pagination->set_url_sprintf_pattern(UserUrlBuilder::users($field, $sort, '%d')->absolute());
    }
 
    public function display()
    {
        return $this->pagination->export();
    }
 
    public function get_number_users_per_page()
    {
        return $this->number_users_per_page;
    }
 
    public function get_display_from()
    {
        $current_page = $this->current_page > 0 ? $this->current_page : 1;
        return ($current_page - 1) * $this->number_users_per_page;
    }
 
    private function get_number_pages()
    {
        return ceil($this->get_number_users() / $this->number_users_per_page);
    }
 
    private function get_number_users()
    {
        return PersistenceContext::get_querier()->count(DB_TABLE_MEMBER);
    }
}
?>