ในการพัฒนา PHP โดยทั่วไป เมื่อมีการผสมโค้ด php และโค้ด html จะค่อนข้างง่ายในการจัดการการแบ่งหน้า และยังสามารถสร้างในรูปแบบของฟังก์ชันได้อีกด้วย ในการพัฒนาล่าสุด มีการใช้โครงสร้างของ Pear::DB + Smarty ดังนั้นฉันจึงพิจารณาการแบ่งหน้าเทมเพลต เนื่องจากไม่สามารถจัดการเพจได้โดยตรง ฉันจึงพิจารณาสร้างสตริงการเพจ
เนื่องจากเป็นโครงสร้างสามชั้น ในรูปแบบของไลบรารีคลาส-->การเรียก PHP-->เทมเพลต การประมวลผลข้อมูลทั้งหมดจึงอยู่ในไลบรารีคลาส ดังนั้นการควบคุมเพจจึงดำเนินการในการเรียก PHP และเทมเพลตจะแยกวิเคราะห์ไฟล์ที่ซับซ้อน ผลลัพธ์ของการโทร ลองดูโค้ดเพจโดยตรงในการเรียก PHP ของเรา:
-------------------------------------- - --------------------------------------------
<?php
-
* ไฟล์: Type.php
* ฟังก์ชั่น: แสดงหนังสือตามหมวดหมู่
* ผู้เขียน: heiyeluren
**/
//ประกอบด้วยไฟล์สาธารณะ รวมถึงไลบรารีคลาส ฯลฯ
need_once("include.php");
// สร้างอินสแตนซ์ของวัตถุการดำเนินการ
$Type = new CTypes();
//จำนวนบันทึกต่อหน้า
กำหนด("PAGE_SIZE", 10);
// รับตัวแปรที่ส่งโดย GET
$TypeID = $tid ? $tid : intval($_REQUEST['tid']);
// จำนวนหนังสือทั้งหมด
$BookTotal = $Type->getBookTotal($TypeID);
/* แกนแสดงเพจจิ้ง*/
//รับจำนวนหน้าทั้งหมด
$pageCount = ($BookTotal/PAGE_SIZE);
//หมายเลขหน้าปัจจุบัน
ถ้า (isset($_GET[หน้า]) && !empty($_GET[หน้า])) {
$page = intval($_GET[หน้า]);
} อื่น {
$เพจ = 1;
-
ถ้า ($หน้า==1) {
$startNum = 0;
} อื่น {
$startNum = ($หน้า-1) * PAGE_SIZE;
-
//สร้างสตริงลิงก์เพจ
ถ้า ($page==1 && $pageCount>1) {
$pageStr = "หน้าก่อน | <a href=/Type.php?tid=".$TypeID"&page=".($page+1).">หน้าถัดไป</a>";
} elseif ($page==$pageCount && $pageCount>1) {
$pageStr = "<a href=/Type.php?tid=".$TypeID."&page=".($page-1).">หน้าก่อน</a> | หน้าถัดไป";
} elseif ($หน้า>1 && $page<=$pageCount) {
$pageStr = "<a href=/Type.php?tid=".$TypeID"&page=".($page-1).">หน้าก่อน</a> |
<a href=/Type.php?tid=".$TypeID"&page=".($page+1).">หน้าถัดไป</a>";
} อื่น {
$pageStr = "หน้าก่อน | หน้าถัดไป";
}
//รับบันทึกปัจจุบันตามจำนวนหน้า
$allBook = $Type->getBookFromType($TypeID, $start=$startNum, $offset=PAGE_SIZE);
// การกำหนดตัวแปรอย่างชาญฉลาด
$tpl->มอบหมาย('BookTotal', $BookTotal);
$tpl->มอบหมาย('allBook', $allBook);
$tpl->มอบหมาย('pageStr', $pageStr);
$tpl->display('Type.html');
unset($Type)
;
-------------------------------------------------- -------------------------------------------------- ----------------------------------
เพื่อความเข้าใจที่ชัดเจนยิ่งขึ้น นี่คือคำอธิบายโดยย่อเกี่ยวกับเนื้อหาพื้นฐานของไลบรารีคลาส: (โค้ดไม่สมบูรณ์)
-------------------------------------------------- -------------------------------------------------- ----------------------------------
<?php
-
* ไฟล์: Type.class.php
* ฟังก์ชั่น: ประเภทการประมวลผลคลาส
* www.knowsky.com
* ผู้เขียน: heiyeluren
**/
classType
-
var $mDsn;
var $mTableName;
var $hPearDB;
//ตัวสร้าง
ประเภทฟังก์ชัน()
-
-
-
//รับวิธีจัดการของคลาส pear DB
ฟังก์ชั่น _getDBClass($fetchMode = DB_FETCHMODE_ASSOC)
-
if(!is_object($this->hPearDB)){
$this->hPearDB = DB::connect($this->mDsn);
$this->hPearDB->query("ตั้งชื่อ 'utf8'");
$นี่->hPearDB->setFetchMode($fetchMode);
ถ้า(DB::IsError($this->hPearDB)){
กลับเท็จ;
-
-
ส่งคืน $this->hPearDB;
}
//รับจำนวนหนังสือทั้งหมด
ฟังก์ชั่น getBookTotal($TypeId)
-
$db = $this->_getDBClass();
$sql = "SELECT COUNT(*) เป็นยอดรวมจาก ...";
$rs = $db->getOne($sql);
ถ้า (DB::isError($rs))
กลับ $rs->getMessage();
อื่น
ส่งคืน $rs;
}
//รับหนังสือทั้งหมด
ฟังก์ชั่น getBookFromType($TypeId, $start, $offset)
-
$db = $this->_getDBClass();
$sql = "SELECT * จาก ... จำกัด $start,$offset";
$rs = $db->getAll($sql);
ถ้า (DB::isError($rs))
กลับ $rs->getMessage();
อื่น
ส่งคืน $rs;
}
}
-
-------------------------------------------------- -------------------------------------------------- ----------------------------------
สุดท้ายนี้ เรามาดูกันว่าเทมเพลต Type.html นี้ได้รับการประมวลผลอย่างไร:
-------------------------------------------------- -------------------------------------------------- ----------------------------------
{*แทรกไฟล์ส่วนหัว*}
{รวมไฟล์="Cendar/head.html"}
<div id="ด้านข้าง">
<ul>
<li>จำนวนหนังสือทั้งหมด: {$BookTotal}</li>
</ul>
</div>
<div id="หนังสือ">
<h2 class="cata">เนื้อหาเฉพาะของหนังสือ</h2>
<ul>
{ชื่อส่วน=Book loop=$allBook}
<li><a href="show_Book.php?tid={$allBook[หนังสือ].id}">{$allBook[หนังสือ].title}</a></li>
{ส่วนอื่น}
<li class="warning">ขณะนี้ไม่มีหนังสือ</li>
{/ส่วน}
</ul>
</div>
{* การแสดงสตริงการแบ่งหน้า*}
<div align="ขวา">
{"GBK"|iconv:"utf-8":$pageStr}
</div>
{* แทรกไฟล์ด้านล่าง*}
{รวมไฟล์="Cendar/foot.html"}
-------------------------------------------------- -------------------------------------------------- ----------------------------------
จากนั้นเราเข้าใจประเด็นสำคัญและรู้ว่าเราสามารถควบคุม $pagStr จากโปรแกรม PHP ให้เป็นสตริงเพจของเราได้ และสุดท้ายมันจะถูกแทนที่ในไฟล์เทมเพลตเพื่อให้ได้ผลลัพธ์
ณ จุดนี้ โดยพื้นฐานแล้ว คุณจะเข้าใจวิธีดำเนินการประมวลผลเพจในเทมเพลตได้ แน่นอนว่า คุณยังสามารถเขียนฟังก์ชันเพจเป็นฟังก์ชัน หรือรวมไว้ในคลาส เพื่อให้สามารถเรียกได้ทุกที่ ฮ่าฮ่า~~~
(กรุณาอย่าพิมพ์โค้ดข้างต้นซ้ำโดยไม่ได้รับอนุญาต)
ผู้แต่ง: heiyeluren
วันที่:2005-8-2