Maison >développement back-end >tutoriel php >Comment créer une pagination personnalisée dans CakePHP ?

Comment créer une pagination personnalisée dans CakePHP ?

WBOY
WBOYoriginal
2023-06-04 08:32:391076parcourir

CakePHP est un framework PHP puissant qui fournit aux développeurs de nombreux outils et fonctionnalités utiles. L'un d'eux est la pagination, qui nous aide à diviser de grandes quantités de données en plusieurs pages, facilitant ainsi la navigation et la manipulation.

Par défaut, CakePHP fournit des méthodes de pagination de base, mais vous devrez parfois créer des méthodes de pagination personnalisées. Cet article va vous montrer comment créer une pagination personnalisée dans CakePHP.

Étape 1 : Créer une classe de pagination personnalisée

Tout d'abord, nous devons créer une classe de pagination personnalisée. Cette classe sera responsable de la gestion de toute la logique liée à la pagination. Créez un nouveau fichier nommé CustomPaginator.php dans le répertoire app/Lib/Utility et ajoutez le code suivant au fichier :

    <?php
    App::uses('PaginatorComponent', 'Controller/Component');

    class CustomPaginator extends PaginatorComponent {
    
        // Override the default method to customize the pagination logic
        public function paginate($object = null, $scope = array(), $whitelist = array()) {
    
            // Get the current page number
            $page = isset($this->Controller->request->params['named']['page']) ? $this->Controller->request->params['named']['page'] : 1;
    
            // Set the default pagination values
            $perPage = 10;
            $start = ($page - 1) * $perPage;
    
            // Get the total count of records
            $count = $object->find('count', array('conditions' => $scope));
    
            // Build the pagination data
            $result = array(
                'count' => $count,
                'perPage' => $perPage,
                'page' => $page,
                'totalPages' => ceil($count / $perPage),
                'start' => $start,
                'end' => ($start + $perPage) > $count ? $count : ($start + $perPage - 1),
                'hasPrevPage' => $page > 1,
                'hasNextPage' => ($start + $perPage) < $count
            );
    
            // Set the pagination data in the controller
            $this->Controller->set('paging', $result);
    
            // Return the paginated records
            return $object->find('all', array('conditions' => $scope, 'limit' => $perPage, 'offset' => $start));
        }
    }

Cette classe de pagination personnalisée est basée sur la classe de pagination par défaut de CakePHP, PaginatorComponent. Nous avons remplacé la méthode paginate() pour implémenter une logique de pagination personnalisée. Il prend les paramètres suivants :

  • $object : L'objet modèle à paginer.
  • $scope : Conditions de requête, utilisées pour filtrer les enregistrements à paginer.
  • $whitelist : tableau de liste blanche pour autoriser ou refuser des paramètres de requête spécifiques

Dans notre implémentation, nous obtenons d'abord le numéro de la page actuelle, puis définissons le nombre d'enregistrements par défaut par page et nombre d'enregistrements de départ. Ensuite, nous utilisons la méthode find() pour obtenir le nombre total d'enregistrements, puis calculons le nombre total de pages et le nombre d'enregistrements de fin. Enfin, nous définissons toutes les données de pagination sur la variable « pagination » du contrôleur et renvoyons les enregistrements paginés.

Étape 2 : Instancier la classe de pagination personnalisée

Maintenant que nous avons créé la classe de pagination personnalisée, nous devons l'instancier dans le contrôleur. Pour ce faire, nous devons ajouter le code suivant dans notre contrôleur :

    <?php
    App::uses('AppController', 'Controller');
    App::uses('CustomPaginator', 'Lib/Utility');
    
    class UsersController extends AppController {
    
        public $components = array('CustomPaginator');
        public $paginate = array('CustomPaginator');
    
        public function index() {
            // Get all users
            $this->set('users', $this->CustomPaginator->paginate($this->User));
        }
    }

Nous utilisons App::uses() pour charger la classe de pagination personnalisée, puis l'instancier dans le contrôleur. Nous avons également ajouté la classe de pagination personnalisée au contrôleur en utilisant les attributs $components et $paginate.

Dans notre action index(), nous appelons $CustomPaginator->paginate() et lui passons notre objet modèle User. Nous définissons ensuite les données utilisateur paginées dans des variables de vue.

Étape 3 : Créer une vue paginée

Enfin, nous devons créer une vue pour afficher les données paginées. Ajoutez le code suivant dans le fichier 'views/users/index.ctp' :

    <h1> Users </h1>
    
    <ul>
    <?php foreach ($users as $user): ?>
        <li> <?php echo $user['User']['name']; ?> </li>
    <?php endforeach; ?>
    </ul>
    
    <div class="pagination">
        <?php
        echo $this->Paginator->prev('<< ' . __('Previous'), array(), null, array('class' => 'disabled'));
        echo $this->Paginator->numbers();
        echo $this->Paginator->next(__('Next') . ' >>', array(), null, array('class' => 'disabled'));
        ?>
    </div>

Cette vue est juste une simple liste d'utilisateurs et affiche ensuite des liens de navigation paginés.

Nous utilisons les méthodes prev(), number() et next() de PaginatorHelper pour générer des liens de navigation. Ces méthodes généreront des liens basés sur le composant '$CustomPaginator' que nous avons défini dans le contrôleur.

CONCLUSION

La pagination personnalisée peut vous offrir un plus grand contrôle et une plus grande flexibilité pour répondre à vos besoins spécifiques. Dans cet article, nous vous montrons comment créer une pagination personnalisée dans CakePHP. Vous pouvez désormais appliquer ces connaissances pour développer des applications plus personnalisées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn