In der allgemeinen PHP-Entwicklung ist die Paginierung relativ einfach zu handhaben, wenn PHP-Code und HTML-Code gemischt werden, und sie kann auch in Form einer Funktion erstellt werden. In der letzten Entwicklung wurde die Struktur von Pear::DB + Smarty verwendet, daher habe ich überlegt, die Vorlage zu paginieren. Da die Seite nicht direkt manipuliert werden kann, habe ich über die Generierung einer Paging-Zeichenfolge nachgedacht.
Da es sich um eine dreistufige Struktur in Form von Klassenbibliothek -> PHP-Aufruf -> Vorlage handelt, erfolgt die gesamte Datenverarbeitung in der Klassenbibliothek, sodass die Paging-Steuerung im PHP-Aufruf durchgeführt wird und die Vorlage komplex analysiert Ergebnis des Anrufs. Schauen wir uns direkt den Paging-Code in unserem PHP-Aufruf an:
-------------------------------------- - ----------------------------------------
<?php
/**
* Datei: Type.php
* Funktion: Bücher unter Kategorien anzeigen
* Autor: heiyeluren
**/
//Enthält öffentliche Dateien, einschließlich Klassenbibliotheken usw.
require_once("include.php");
//Instanziieren Sie das Operationsobjekt
$Type = new CTypes();
//Anzahl der Datensätze pro Seite
define("PAGE_SIZE", 10);
//Von GET übermittelte Variablen abrufen
$TypeID = $tid ? $tid : intval($_REQUEST['tid']);
//Gesamtzahl der Bücher
$BookTotal = $Type->getBookTotal($TypeID);
/* Paging-Anzeigekern*/
//Die Gesamtzahl der Seiten abrufen
$pageCount = ($BookTotal/PAGE_SIZE);
//Aktuelle Seitennummer
if (isset($_GET[page]) && !empty($_GET[page])) {
$page = intval($_GET[page]);
} anders {
$page = 1;
}
if ($page==1) {
$startNum = 0;
} anders {
$startNum = ($page-1) * PAGE_SIZE;
}
//Paging-Link-String generieren
if ($page==1 && $pageCount>1) {
$pageStr = "Vorherige Seite | <a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Nächste Seite</a>";
} elseif ($page==$pageCount && $pageCount>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Vorherige Seite</a> | Nächste Seite";
} elseif ($page>1 && $page<=$pageCount) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Vorherige Seite</a> |
<a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Nächste Seite</a>";
} anders {
$pageStr = "Vorherige Seite | Nächste Seite";
}
// Den aktuellen Datensatz entsprechend der Anzahl der Seiten abrufen
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE);
//Smarty-Variablenzuweisung
$tpl->assign('BookTotal', $BookTotal);
$tpl->assign('allBook', $allBook);
$tpl->assign('pageStr', $pageStr);
(
'Type.html')
;
-------------------------------------------------- ----------------------------------
Zum besseren Verständnis finden Sie hier eine kurze Beschreibung der grundlegenden Inhalte der Klassenbibliothek: (Der Code ist unvollständig)
-------------------------------------------------- ----------------------------------
<?php
/**
* Datei: Type.class.php
* Funktion: Typverarbeitungsklasse
* www.knowsky.com
* Autor: heiyeluren
**/
classType
{
var $mDsn;
var $mTableName;
var $hPearDB;
//Konstruktor
functionType()
{
//......
}
//Holen Sie sich die Handle-Methode der Pear-DB-Klasse
Funktion _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
{
if(!is_object($this->hPearDB)){
$this->hPearDB = DB::connect($this->mDsn);
$this->hPearDB->query("Namen festlegen 'utf8'");
$this->hPearDB->setFetchMode($fetchMode);
if(DB::IsError($this->hPearDB)){
return false;
}
}
return $this->hPearDB;
}
//Erhalte die Gesamtzahl der Bücher
Funktion getBookTotal($TypeId)
{
$db = $this->_getDBClass();
$sql = "SELECT COUNT(*) AS total FROM ...";
$rs = $db->getOne($sql);
if (DB::isError($rs))
return $rs->getMessage();
anders
return $rs;
}
//Alle Bücher abrufen
Funktion getBookFromType($TypeId, $start, $offset)
{
$db = $this->_getDBClass();
$sql = "SELECT * FROM ... LIMIT $start,$offset";
$rs = $db->getAll($sql);
if (DB::isError($rs))
return $rs->getMessage();
anders
return $rs;
}
}
?>
-------------------------------------------------- ----------------------------------
Schauen wir uns abschließend an, wie diese Type.html-Vorlage verarbeitet wird:
-------------------------------------------------- ----------------------------------
{*Header-Datei einfügen*}
{include file="Cendar/head.html"}
<div id="side">
<ul>
<li>Gesamtzahl der Bücher: {$BookTotal}</li>
</ul>
</div>
<div id="Book">
<h2 class="cata">Der spezifische Inhalt des Buches</h2>
<ul>
{Abschnittsname=Buchschleife=$allBook}
<li><a href="show_Book.php?tid={$allBook[Book].id}">{$allBook[Book].title}</a></li>
{sectionelse}
<li class="warning">Derzeit sind keine Bücher vorhanden</li>
{/Abschnitt}
</ul>
</div>
{* Anzeige der Paginierungszeichenfolge*}
<div align="right">
{"GBK"|iconv:"utf-8":$pageStr}
</div>
{* untere Datei einfügen*}
{include file="Cendar/foot.html"}
-------------------------------------------------- ----------------------------------
Dann verstehen wir den entscheidenden Punkt und wissen, dass wir $pagStr vom PHP-Programm aus als unseren Paging-String steuern können, und schließlich wird er in der Vorlagendatei ersetzt, um den Effekt zu erzielen.
An diesem Punkt verstehen Sie grundsätzlich, wie die Paging-Verarbeitung in der Vorlage durchgeführt wird. Natürlich können Sie die Paging-Funktion auch als Funktion schreiben oder in eine Klasse kapseln, sodass sie überall aufgerufen werden kann. Haha~~~
(Bitte drucken Sie den obigen Code nicht ohne Genehmigung nach.)
Autor: heiyeluren
Datum: 2005-8-2