Maison >cadre php >PensezPHP >Comment implémenter la pagination dans thinkphp

Comment implémenter la pagination dans thinkphp

PHPz
PHPzoriginal
2023-04-11 10:42:561934parcourir

ThinkPHP est un framework PHP basé sur le modèle de développement MVC Puisque nous développons des applications MVC, la fonction de pagination est indispensable. Alors, comment ThinkPHP implémente-t-il la pagination ? Laissez-moi vous présenter comment ThinkPHP implémente la pagination.

1. Le concept de base de la pagination ThinkPHP

La pagination est de diviser une grande collection de données en N pages, afin que les utilisateurs ne puissent en visualiser qu'une partie. Il existe deux types de pagination dans ThinkPHP, l'une est la pagination normale et l'autre est la pagination AJAX.

La pagination normale signifie que chaque page doit actualiser la page entière. Les données sont obtenues du serveur via le code PHP puis renvoyées au client. Cette méthode d'interaction des données est inefficace, mais elle est simple à écrire.

La pagination AJAX consiste à demander des données de manière asynchrone via le front-end et à transférer les données vers le serveur via la technologie Ajax. Une fois que le côté serveur a obtenu les données de la base de données, il renvoie les données au front-end. Cette méthode d’interaction des données est très efficace, mais nécessite l’utilisation d’une technologie frontale plus complexe.

2. Comment utiliser la pagination dans ThinkPHP

Plus précisément, l'utilisation de la pagination dans ThinkPHP comprend principalement deux modules : le module Modèle et le module Vue. Dans le module Modèle, nous interrogeons les données de la base de données en utilisant la classe Query ou la classe Db de ThinkPHP. Dans le module View, nous effectuons des opérations d'affichage des données en utilisant la classe de pagination Pagination de ThinkPHP et le contrôle Paginator intégré.

  1. Implémenter des opérations de requête de données dans le module Modèle

Dans le module Modèle, nous devons d'abord interroger les données de la base de données, puis définir le décalage de requête et la quantité de requête des données en fonction de la taille de la pagination, et ne renvoie que la page de données requise. Les opérations spécifiques sont les suivantes :

<?php
namespace Home\Model;
use Think\Model;
class UserModel extends Model{
    public function getPageUsers($page=1,$rows=10){
        $result = array();
        $count = $this->count(); // 获取总记录数
        $offset = ($page-1)*$rows; // 查询的起始位置
        $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录
        $pagination = new \Think\Paginator($count,$rows); // 实例化分页对象
        $result['rows'] = $data;
        $result['pagination'] = $pagination->show(); // 获取分页显示的HTML代码
        return $result;
    }
}

Dans le code ci-dessus, la méthode count() est utilisée pour obtenir le nombre total d'enregistrements, la méthode limit() est utilisée pour obtenir les enregistrements de la page en cours, et la classe Pagination est utilisé pour instancier l'objet de pagination. Il convient de noter que la méthode limit() prend en charge les opérations en chaîne et peut être utilisée conjointement avec la méthodewhere() pour implémenter des opérations de requête plus complexes.

  1. Implémenter les opérations d'affichage des données dans le module View

Dans le module View, nous devons utiliser le contrôle Paginator intégré de ThinkPHP pour afficher les informations de pagination et utiliser la classe de pagination Pagination de ThinkPHP pour générer du code HTML de pagination. Les opérations spécifiques sont les suivantes :

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户信息管理</title>
    <link rel="stylesheet" type="text/css" href="__PUBLIC__/bootstrap/css/bootstrap.min.css">
</head>
<body>
<div class="container">
    <div class="panel panel-default">
        <div class="panel-heading">用户信息管理</div>
        <div class="panel-body">
            <table class="table table-striped">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>用户名</th>
                    <th>年龄</th>
                    <th>电话</th>
                    <th>邮箱</th>
                </tr>
                </thead>
                <tbody>
                <?php foreach($users[&#39;rows&#39;] as $user):?>
                <tr>
                    <td><?php echo $user[&#39;id&#39;];?></td>
                    <td><?php echo $user[&#39;name&#39;];?></td>
                    <td><?php echo $user[&#39;age&#39;];?></td>
                    <td><?php echo $user[&#39;phone&#39;];?></td>
                    <td><?php echo $user[&#39;email&#39;];?></td>
                </tr>
                <?php endforeach;?>
                </tbody>
            </table>
            <nav aria-label="Page navigation">
                <?php echo $users[&#39;pagination&#39;];?>
            </nav>
        </div>
    </div>
</div>
</body>
</html>

Dans le code ci-dessus, nous utilisons principalement le contrôle Paginator et la classe Pagination. Dans le contrôle Paginator, nous pouvons définir la disposition, le style, etc. du contrôle. Dans la classe Pagination, nous avons appelé la méthode show() pour obtenir le code HTML de pagination à utiliser par le contrôle Paginator. En même temps, dans la boucle foreach, nous affichons le tableau $rows transféré de la couche Modèle vers la table.

3. Questions fréquemment posées sur la pagination ThinkPHP

  1. Comment définir le nombre d'enregistrements affichés sur chaque page ?

Dans la méthode getPageUsers de la couche Modèle, nous pouvons définir le nombre d'enregistrements par défaut par page, comme suit :

public function getPageUsers($page=1,$rows=10){
    ...
}

Parmi eux, $rows représente le nombre d'enregistrements par défaut par page. Nous pouvons également passer directement des paramètres. dans la couche Vue pour modifier le nombre d’enregistrements par page.

  1. Comment afficher la première page ?

Dans la couche Vue, lorsque l'utilisateur clique sur la première page, la valeur du paramètre $page est 1 et nous devons modifier la plage de requête des données en conséquence. L'opération spécifique est la suivante :

public function getPageUsers($page=1,$rows=10){
    $result = array();
    $count = $this->count(); // 获取总记录数
    $offset = ($page-1)*$rows; // 查询的起始位置
    $data = $this->limit($offset,$rows)->select(); // 查询当前页的记录
    
    // 如果是第一页,直接返回第一页的数据
    if($page == 1){
        $pagination = new \Think\Paginator($count,$rows);
        $result['rows'] = $data;
        $result['pagination'] = $pagination->show();
        return $result;
    }
    
    // 如果不是第一页,则查询第一页的数据,获取分页HTML代码
    $firstPageData = $this->limit(0,$rows)->select();
    $pagination = new \Think\Paginator($count,$rows);
    $result['rows'] = $data;
    $result['pagination'] = str_replace("1</a>",$firstPageData."</a>",$pagination->show());
    return $result;
}

Dans le code ci-dessus, lorsque $page est égal à 1, on renvoie directement les données de la première page. Lorsque $page est supérieur à 1, nous réinterrogeons les données de la première page, obtenons le code HTML de pagination et le remplaçons dans la « première page » de la page actuelle. De cette façon, vous pouvez cliquer sur le bouton « Première page » sur n'importe quelle page pour revenir à la première page de données.

  1. Comment utiliser la pagination AJAX ?

Pour une pagination ordinaire, la page entière doit être redemandée à chaque fois que la page est tournée, ce qui est évidemment inefficace pour les grands ensembles de données, nous utilisons donc souvent la technologie AJAX pour obtenir une pagination sans actualisation.

Vous devez faire attention aux points suivants lorsque vous utilisez la pagination AJAX :

(1) Dans la couche Vue, vous devez ajouter un code jQuery similaire à celui ci-dessus pour surveiller le bouton de pagination :

$(function () { // 加载页面时,注册分页事件
    $("#page").on('click','a',function(){
        var url = $(this).attr('href');
        $("#table").load(url);
        return false;
    });
});

Dans le code ci-dessus, nous ajoutons sur le bouton de pagination Un écouteur d'événement de clic est installé Lorsque vous cliquez sur le bouton, une requête AJAX est envoyée pour remplir les données dans la position correspondante.

(2) Dans la couche Modèle, les données au format JSON doivent être renvoyées dans la méthode getPageUsers, comme suit :

public function getPageUsers($page=1,$rows=10){
    ...
    $result = array();
    $pagination = new \Think\Paginator($count,$rows);
    $result['rows'] = $data;
    $result['pagination'] = $pagination->show();
    return json_encode($result);
}

La fonction json_encode() est utilisée ici pour formater les données et les renvoyer au format JSON. De cette manière, les données peuvent être facilement analysées dans la couche View.

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