Maison > cadre php > YII > le corps du texte

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

WBOY
Libérer: 2023-06-21 13:51:05
original
955 Les gens l'ont consulté

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(),
Copier après la connexion

));

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

<?php $this->widget('CLinkPager', array(
    'pages' => $pagination,
)); ?>
Copier après la connexion

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,
Copier après la connexion

));

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 :

<?php $this->renderPartial('_userlist', array('users' => $users)); ?>
Copier après la connexion


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

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));
Copier après la connexion

}

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();
}
Copier après la connexion

}

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal