Dalam pengembangan PHP secara umum, ketika kode php dan kode html dicampur, penanganan penomoran halaman relatif mudah, dan juga dapat dikonstruksikan dalam bentuk fungsi. Dalam perkembangan terakhir, struktur Pear::DB + Smarty digunakan, jadi saya mempertimbangkan untuk membuat paginasi pada templat. Karena halaman tidak dapat dimanipulasi secara langsung, saya mempertimbangkan untuk membuat string paging.
Karena merupakan struktur tiga tingkat, dalam bentuk perpustakaan kelas-->panggilan PHP-->templat, semua pemrosesan data ada di perpustakaan kelas, sehingga kontrol paging dilakukan dalam panggilan PHP, dan templat mem-parsing secara kompleks hasil panggilan tersebut. Mari kita lihat langsung kode paging dalam panggilan PHP kita:
-------------------------------------- - ----------------------------------------
<?php
/**
* File: Ketik.php
* Fungsi: Menampilkan buku berdasarkan kategori
* Penulis: heiyeluren
**/
//Berisi file publik, termasuk perpustakaan kelas, dll.
require_once("include.php");
//Instansiasi objek operasi
$Type = new CTypes();
//Jumlah record per halaman
mendefinisikan("PAGE_SIZE", 10);
//Dapatkan variabel yang dikirimkan oleh GET
$TypeID = $tid ? $tid : intval($_REQUEST['tid']);
//Jumlah total buku
$BookTotal = $Type->getBookTotal($TypeID);
/* Inti tampilan halaman*/
//Dapatkan jumlah total halaman
$pageCount = ($Total Buku/PAGE_SIZE);
//Nomor halaman saat ini
if (isset($_GET[halaman]) && !empty($_GET[halaman])) {
$halaman = intval($_GET[halaman]);
} kalau tidak {
$halaman = 1;
}
jika ($halaman==1) {
$startNum = 0;
} kalau tidak {
$startNum = ($halaman-1) * PAGE_SIZE;
}
//Buat string tautan paging
if ($halaman==1 && $jumlahhalaman>1) {
$pageStr = "Halaman sebelumnya | <a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Halaman berikutnya</a>";
} elseif ($halaman==$jumlahhalaman && $jumlahhalaman>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1)..">Halaman sebelumnya</a> | Halaman selanjutnya";
} elseif ($halaman>1 && $halaman<=$jumlah halaman) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">Halaman sebelumnya</a> |
<a href=/Type.php?tid=".$TypeID."&page=".($page+1).">Halaman berikutnya</a>";
} kalau tidak {
$pageStr = "Halaman sebelumnya | Halaman berikutnya";
}
//Dapatkan record saat ini sesuai dengan jumlah halaman
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE);
//Penugasan variabel cerdas
$tpl->assign('Total Buku', $Total Buku);
$tpl->assign('semuaBuku', $semuaBuku);
$tpl->assign('pageStr', $pageStr);
$tpl->display('Type.html');
tidak disetel($Type)
;
--------------------------------------------------- -----------------------------------
Untuk lebih jelasnya, berikut uraian singkat isi dasar perpustakaan kelas: (Kode tidak lengkap)
--------------------------------------------------- -----------------------------------
<?php
/**
* File: Tipe.class.php
* Fungsi: Ketik kelas pemrosesan
* www.knowsky.com
* Penulis: heiyeluren
**/
tipe kelas
{
var $mDsn;
var $mNamaTabel;
var $hPearDB;
//Konstruktor
tipe fungsi()
{
//...
}
//Dapatkan metode pegangan kelas DB pir
fungsi _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
{
if(!is_object($ini->hPearDB)){
$ini->hPearDB = DB::koneksi($ini->mDsn);
$this->hPearDB->query("setel nama 'utf8'");
$ini->hPearDB->setFetchMode($fetchMode);
if(DB::IsError($ini->hPearDB)){
kembali salah;
}
}
kembalikan $ini->hPearDB;
}
//Dapatkan jumlah total buku
fungsi getBookTotal($TypeId)
{
$db = $ini->_getDBClass();
$sql = "PILIH JUMLAH(*) SEBAGAI total DARI...";
$rs = $db->getOne($sql);
jika (DB::isError($rs))
kembalikan $rs->getMessage();
kalau tidak
kembalikan $rs;
}
//Dapatkan semua buku
fungsi getBookFromType($TypeId, $mulai, $offset)
{
$db = $ini->_getDBClass();
$sql = "PILIH * DARI ... BATAS $mulai,$offset";
$rs = $db->getAll($sql);
jika (DB::isError($rs))
kembalikan $rs->getMessage();
kalau tidak
kembalikan $rs;
}
}
?>
--------------------------------------------------- -----------------------------------
Terakhir, mari kita lihat bagaimana template Type.html ini diproses:
--------------------------------------------------- -----------------------------------
{*Masukkan file header*}
{sertakan file="Cendar/head.html"}
<div id="sisi">
<ul>
<li>Jumlah total buku: {$BookTotal</li>
</ul>
</div>
<div id="Buku">
<h2 class="cata">Isi spesifik buku</h2>
<ul>
{nama bagian=Perulangan buku=$semuaBuku}
<li><a href="show_Book.php?tid={$allBook[Book].id}">{$allBook[Book].title}</a></li>
{bagian lain}
<li class="warning">Saat ini tidak ada buku</li>
{/bagian}
</ul>
</div>
{* Tampilan string paginasi*}
<div menyelaraskan="kanan">
{"GBK"|iconv:"utf-8":$pageStr}
</div>
{* masukkan file bawah*}
{include file="Cendar/foot.html"}
--------------------------------------------------- -----------------------------------
Kemudian kita memahami poin kuncinya dan mengetahui bahwa kita dapat mengontrol $pagStr dari program PHP untuk menjadi string paging kita, dan akhirnya akan diganti dalam file template untuk mencapai efeknya.
Pada titik ini, pada dasarnya Anda memahami cara melakukan pemrosesan paging di templat. Tentu saja, Anda juga bisa menulis fungsi paging sebagai fungsi, atau merangkumnya ke dalam kelas, sehingga bisa dipanggil di mana saja. Haha~~~
(Tolong jangan mencetak ulang kode di atas tanpa izin)
Penulis: heiyeluren
Tanggal:2005-8-2