Dans le développement PHP général, lorsque le code php et le code html sont mélangés, il est relativement simple de gérer la pagination, et elle peut également être construite sous la forme d'une fonction. Dans un développement récent, la structure de Pear::DB + Smarty a été utilisée, j'ai donc envisagé de paginer le modèle. Puisque la page ne peut pas être directement manipulée, j'ai envisagé de générer une chaîne de pagination.
Parce qu'il s'agit d'une structure à trois niveaux, sous la forme d'une bibliothèque de classes -> appel PHP -> modèle, tout le traitement des données est dans la bibliothèque de classes, donc le contrôle de pagination est effectué dans l'appel PHP et le modèle analyse de manière complexe le résultat de l'appel. Regardons directement le code de pagination dans notre appel PHP :
-------------------------------------- - ---------------------------------------------
<?php
/**
* Fichier : Type.php
* Fonction : Afficher les livres sous catégories
* Auteur : heiyeluren
**/
//Contient des fichiers publics, y compris des bibliothèques de classes, etc.
require_once("include.php");
//Instancier l'objet opération
$Type = new CTypes();
//Nombre d'enregistrements par page
définir("PAGE_SIZE", 10);
//Récupère les variables soumises par GET
$TypeID = $tid ? $tid : intval($_REQUEST['tid']);
//Nombre total de livres
$BookTotal = $Type->getBookTotal($TypeID);
/* Noyau d'affichage de pagination*/
//Obtenir le nombre total de pages
$pageCount = ($BookTotal/PAGE_SIZE);
//Numéro de la page actuelle
if (isset($_GET[page]) && !empty($_GET[page])) {
$page = intval($_GET[page]);
} autre {
$page = 1 ;
}
si ($page==1) {
$numérodébut = 0 ;
} autre {
$startNum = ($page-1) * PAGE_SIZE ;
}
// Générer une chaîne de lien de pagination
si ($page==1 && $pageCount>1) {
$pageStr = "Page précédente | <a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Page suivante</a>";
} elseif ($page==$pageCount && $pageCount>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Page précédente</a> | Page suivante";
} elseif ($page>1 && $page<=$pageCount) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Page précédente</a> |
<a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Page suivante</a>";
} autre {
$pageStr = "Page précédente | Page suivante";
}
//Récupère l'enregistrement courant en fonction du nombre de pages
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE
//Assignation de variable Smarty
);
$tpl->assign('BookTotal', $BookTotal);
$tpl->assign('allBook', $allBook);
$tpl->assign('pageStr', $pageStr);
(
'Type.html')
;
-------------------------------------------------- ----------------------------------
Pour une compréhension plus claire, voici une brève description du contenu de base de la bibliothèque de classes : (Le code est incomplet)
-------------------------------------------------- ----------------------------------
<?php
/**
* Fichier : Type.class.php
* Fonction : classe de traitement de type
* www.knowsky.com
* Auteur : heiyeluren
**/
Type de classe
{
var $mDsn;
var $mTableName;
var $hPearDB;
//Constructeur
fonctionType()
{
//...
}
//Obtenir la méthode handle de la classe pear DB
fonction _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
{
if(!is_object($this->hPearDB)){
$this->hPearDB = DB::connect($this->mDsn);
$this->hPearDB->query("définir les noms 'utf8'");
$this->hPearDB->setFetchMode($fetchMode);
if(DB::IsError($this->hPearDB)){
renvoie faux ;
}
}
retourner $this->hPearDB ;
}
//Obtenir le nombre total de livres
fonction getBookTotal($TypeId)
{
$db = $this->_getDBClass();
$sql = "SELECT COUNT(*) AS total FROM...";
$rs = $db->getOne($sql);
si (DB::isError($rs))
return $rs->getMessage();
autre
retourner $rs ;
}
//Obtenir tous les livres
fonction getBookFromType($TypeId, $start, $offset)
{
$db = $this->_getDBClass();
$sql = "SELECT * FROM ... LIMIT $start,$offset";
$rs = $db->getAll($sql);
si (DB::isError($rs))
return $rs->getMessage();
autre
retourner $rs ;
}
}
?>
-------------------------------------------------- ----------------------------------
Enfin, regardons comment ce modèle Type.html est traité :
-------------------------------------------------- ----------------------------------
{*Insérer le fichier d'en-tête*}
{include file="Cendar/head.html"}
<div id="côté">
<ul>
<li>Nombre total de livres : {$BookTotal}</li>
</ul>
</div>
<div id="Livre">
<h2 class="cata">Le contenu spécifique du livre</h2>
<ul>
{nom de la section=Boucle du livre=$allBook}
<li><a href="show_Book.php?tid={$allBook[Book].id}">{$allBook[Book].title}</a></li>
{sectionautre}
<li class="warning">Il n'y a actuellement aucun livre</li>
{/section}
</ul>
</div>
{* Affichage de la chaîne de pagination*}
<div align="right">
{"GBK"|iconv:"utf-8":$pageStr}
</div>
{* insérer le fichier du bas*}
{include file="Cendar/foot.html"}
-------------------------------------------------- ----------------------------------
Ensuite, nous saisissons le point clé et savons que nous pouvons contrôler $pagStr à partir du programme PHP pour être notre chaîne de pagination, et finalement elle sera remplacée dans le fichier modèle pour obtenir l'effet.
À ce stade, vous comprenez essentiellement comment effectuer le traitement de pagination dans le modèle. Bien sûr, vous pouvez également écrire la fonction de pagination en tant que fonction, ou l'encapsuler dans une classe, afin qu'elle puisse être appelée partout. Haha~~~
(Veuillez ne pas réimprimer le code ci-dessus sans autorisation)
Auteur : heiyeluren
Date:2005-8-2