Maison  >  Article  >  cadre php  >  Pagination des données dans le framework Yii : optimisation de l'affichage des données

Pagination des données dans le framework Yii : optimisation de l'affichage des données

WBOY
WBOYoriginal
2023-06-21 13:51:05875parcourir

Avec le développement rapide d'Internet, les données croissent de plus en plus vite. Dans les applications Web, la pagination des données est l'un des outils nécessaires pour améliorer l'expérience utilisateur. Dans le framework Yii, la pagination des données est facile à mettre en œuvre. Cet article présentera la pagination des données dans le framework Yii et comment optimiser l'affichage des données lorsque la quantité de données est importante.

1. Paging des données dans le framework Yii

1.1 Classe Paging

Dans le framework Yii, la fonction de pagination est encapsulée dans la classe CPagination. La classe CPagination fournit les méthodes courantes suivantes :

  • setPageVar : définit le nom du paramètre de pagination, la valeur par défaut est « page »
  • getPageCount : obtient le nombre total de pages
  • getItemCount : obtient le nombre d'éléments de données ;
  • getLimitOffset : obtenez l'instruction LIMIT.. .OFFSET... ;
  • getPages : obtenez le code HTML de la pagination.
1.2 Utilisation de CPagination

Supposons que nous ayons un modèle utilisateur User, qui contient 10 000 éléments de données qui doivent être affichés dans des pages. Tout d’abord, nous devons instancier l’objet CPagination dans la méthode actionIndex dans UserController :

$pagination = new CPagination(10000);

Ensuite, nous pouvons définir la quantité de données pour chaque page :

$pagination->pageSize = 20;

Ou utilisez la valeur par défaut :

$pagination->pageSize = Yii::app()->user->pageSize;

Ensuite, nous devons calculer le numéro de page actuel :

$pagination- >setCurrentPage($_GET['page']);

Enfin, nous devons afficher les données en fonction du numéro de page actuel et de la quantité de données sur chaque page :

$users = User ::model()->findAll (array(

'limit' => $pagination->getLimit(),
'offset' => $pagination->getOffset(),

));

Enfin, nous devons également utiliser la méthode getPages dans le fichier de vue pour obtenir le code HTML de pagination :

dc6dce4a544fdca2df29d5ac0ea9906b

<?php $this->widget('CLinkPager', array(
    'pages' => $pagination,
)); ?>

16b28748ea4df4d9c2150843fecfba68

2. Optimiser l'affichage des données

Lorsque la quantité de données est importante, la méthode de pagination conventionnelle peut ralentir le chargement des pages et dégrader l'expérience utilisateur. Voici deux façons d’optimiser l’affichage des données.

2.1 Paging Ajax

L'utilisation de la pagination Ajax peut éviter le problème de l'actualisation de la page entière à chaque fois que vous changez de page. Lorsque l'utilisateur clique sur le lien de pagination, une requête Ajax est envoyée pour mettre à jour uniquement la partie qui doit être mise à jour, augmentant considérablement la vitesse de rafraîchissement de la page.

$pagination = new CPagination(10000);

$pagination->pageSize = 20;
$pagination->setCurrentPage($_GET['page']);

$this->render('index' , array(

'users' => User::model()->findAll(array(
    'limit' => $pagination->getLimit(),
    'offset' => $pagination->getOffset(),
)),
'pagination' => $pagination,

));

Dans le fichier de vue, nous utilisons yii-ajax-linkpager-widget pour remplacer le contrôle CLinkPager. Lorsque l'utilisateur clique sur le lien de pagination, utilisez Ajax pour mettre à jour les données :

d44d5cbb027ad62f803fefd2a6a7996a

<?php $this->renderPartial('_userlist', array('users' => $users)); ?>

16b28748ea4df4d9c2150843fecfba68

fa0d42a2f72d3537a1056757e28847bc

<?php $this->widget('ext.yii-ajax-linkpager-widget.EAjaxLinkPager', array(
    'ajaxUpdate' => 'userlist',
    'pages' => $pagination,
)); ?>

d4e6ef3935d870d31c81823c096b9b03

Dans le dossier _controller, nous devons ajouter une méthode actionPage pour gérer les requêtes de pagination dans cette méthode :

public function actionPage()

{

// 处理分页请求,返回分页数据
$pagination = new CPagination(10000);
$pagination->pageSize = 20;
$pagination->setCurrentPage($_GET['page']);

$users = User::model()->findAll(array(
    'limit' => $pagination->getLimit(),
    'offset' => $pagination->getOffset(),
));

$this->renderPartial('_userlist', array('users' => $users));

}

2.2 Mise en cache des données de pagination

Cache pagination La mise en cache des données sur un serveur de cache peut améliorer considérablement les performances de pagination. Lorsque l'utilisateur demande des données de pagination, vérifiez d'abord si le serveur de cache a des données en cache, et si c'est le cas, renvoyez les données directement, sinon, interrogez la base de données, stockez les données dans le serveur de cache, puis renvoyez les données.

Nous pouvons utiliser le mécanisme de mise en cache fourni par le framework Yii. Utilisez COutputCache dans la méthode actionIndex du contrôleur pour mettre en cache les données de pagination :

public function actionIndex()

{

// 缓存时间为10分钟
$cacheId = __CLASS__.__METHOD__.md5(Yii::app()->user->id);
$cacheTime = 10*60;

if(!$this->beginCache($cacheId, array(
    'duration' => $cacheTime,
)))
{
    $pagination = new CPagination(10000);
    // ...
    $users = User::model()->findAll(array(
        'limit' => $pagination->getLimit(),
        'offset' => $pagination->getOffset(),
    ));

    $this->render('index', array(
        'users' => $users,
        'pagination' => $pagination,
    ));

    $this->endCache();
}

}

Lorsque l'utilisateur demande des données de pagination, si des données mises en cache existent dans le serveur de cache, les données mises en cache seront renvoyées directement ; Sinon, la base de données est interrogée, les données sont stockées dans le serveur de cache et les données sont renvoyées.

En résumé, la fonction de pagination de données du framework Yii est facile à mettre en œuvre et prend en charge une variété de méthodes d'optimisation, ce qui peut grandement améliorer l'expérience utilisateur des applications Web. Qu'il s'agisse d'une petite quantité de données ou d'une grande quantité de données, la pagination des données peut être facilement mise en œuvre.

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