<?php
/***
*by落月殘影<aofanliguo@126.com>
*please mail me when you find errors!
*/
//包含常用的資料庫操作
//include 'db.class.php';
//包含smarty資料庫操作類庫
//include "smarty/libs/Smarty.class.php";
//當然也可以包含在上級目錄中
//-----------------------------------------------------------
class PageSmarty{
//類傳入
var $db ;//參數被傳入以便資料庫操作
var $tpl;//參數傳入使用模板技術
var $sql;//查詢的資料操作
//分頁相關
var $url;
var $pageSize = 20;//可以設定
var $totalNumber = -1;
var $page_Number = -1;
var $pager_PageID = -1;
var $pager_links = "";
/***-------------------------------------
*/
function PageSmarty($db,$tpl,$sql,$url=""){
//建議傳遞url變數,能更好的控制葉面流轉,提高可移植性
//相應的smarty設定
//這裡有個相對路徑問題.載入包含語句時候是相對於此目錄
//當被上級目錄包含,下面的路徑設定問題針對於上級目錄
//當路徑有問題時,可使用類似$page->tpl->template設定覆蓋
$this->tpl = $tpl;
$this->tpl->template_dir = "libs/templates/";
$this->tpl->compile_dir = "libs/templates_c/";
$this->tpl->config_dir = "libs/configs/";
$this->tpl->cache_dir = "libs/cache/";
$this->tpl->left_delimiter = '<{';
$this->tpl->right_delimiter = '}>';
$this->sql = $sql;
$this->db = $db;
$this->url = $url;
}
/***------------------------------------
*/
//設定當前的每頁顯示的數目,預設的是20
function setPageSize($pageSize){
$this->pageSize = $pageSize;
}
/***------------------------------------
*/
//得到記錄總數
function getTotalNumber(){
$this->db->query_withresult($this->sql);
$this->totalNumber = $this->db->db_num_rows();
return $this->totalNumber;
}
/***------------------------------------
*/
//得到總頁數
function getPageNumber(){
$this->page_Number = ceil($this->totalNumber/$this->pageSize);
return $this->page_Number;
}
/***------------------------------------
*/
//把結果集存到SMARTY可以用的數組中
//注意選擇的範圍
function makeList(){
if($this->totalNumber<= $this->pageSize){
//如果資料的記錄少於葉面數目,全部顯示使用此種模式
for($i=0;$i<=$this->totalNumber;$i++){
$this->db->row = mysql_fetch_array($this->db->result);
$data[] = $this->db->row;
}
//正常進行模式,實現正序排列
}else{
for($i=($this->pager_PageID-1)*$this->pageSize;$i<($this->pager_PageID)*$this->pageSize;$i++){
//如果資料顯示超出總數範圍-->停止!主要考慮最後一頁
if($i>=$this->totalNumber){break;}
$this->db->db_data_seek($this->db->result,$i);
$this->db->row = mysql_fetch_array($this->db->result);
//取得的資料用smarty註冊到顯示葉面處理
$data[] = $this->db->row;
}
}
return $data;
}
/***------------------------------------
*/
//從get參數得到當前的頁碼
function getCurPage(){
if(isset($_GET['pager_PageID'])&& !empty($_GET['pager_PageID'])){
$this->pager_PageID = intval($_GET['pager_PageID']);
}else{
//如果是第一次訪問,則設定當前頁為第一頁
$this->pager_PageID = 1;
}
return $this->pager_PageID;
}
/***------------------------------------
*/
//製造需要顯示的頁碼列表
function makePageList(){
//防止錯誤提交
if($this->pager_PageID<=0)$this->pager_PageID=1;
if($this->pager_PageID>=$this->page_Number)$this->pager_PageID=$this->page_Number;
//如果是第一頁
if("1" == $this->pager_PageID){
if($this->page_Number>1){
$this->pager_Links="<a href=".$this->url."?pager_PageID=2>下一頁</a> <a href=".$this->url."?pager_PageID=".$this->page_Number.">尾頁</a>";
}else{
$this->pager_Links="尾頁";
}
}
//如果是最後一頁
elseif($this->page_Number == $this->pager_PageID){
$this->pager_Links="<a href=".$this->url."?pager_PageID=1>首頁</a> <a href=".$this->url."?pager_PageID=".($this->pager_PageID-1).">上一頁</a>";
}
//通用中間情況
else{
$this->pager_Links="<a href=".$this->url."?pager_PageID=".($this->pager_PageID-1).">上一頁</a> <a href=".$this->url."?pager_PageID=".($this->pager_PageID+1).">下一頁</a>";
}
return $this->pager_Links;
}
/***------------------------------------
*/
//執行相應操作,傳遞一些可能使用的變數,具體的變數傳遞可以在控制層使用
function exec($pageto){
$this->tpl->assign("curPage",$this->getCurpage());//當前頁碼
$this->tpl->assign("totalNumber",$this->getTotalNumber());//記錄總數
$this->tpl->assign("pageNumber",$this->getPageNumber());//總頁數
$this->tpl->assign("pageLinks",$this->makePageList());//頁碼導航
$this->tpl->assign("list",$this->makeList());//具體資料
$this->tpl->display($pageto);//調用模板相應葉面
return $this;
}
/***-----------------------------------
/*使用範例////////////////////////////
include 'config.php';
require "libs/page.smarty.class.php";
$db = new DB(HOST,DB_USER,DB_PASSWORD,DB_DATABASE);
$conn=$db->conn();
$tpl = new Smarty();
//可以在控制層具體設定傳遞參數
$tpl->assign("title", "這是lycy");
$tpl->assign("content", "我要顯示lycy");
///////////////////////////////////////
$sql = "select * from guest_main";
$url="test.php";
$page = new PageSmarty($db,$tpl,$sql,$url);
$page->setPageSize(5);
//構造一個資料庫分頁類並和smarty接合,需要傳入四個個參數
//傳遞模板葉面
$page->exec("test.html");
****************************************
//模板頁
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title><{$title}></title>
</head>
<body>
someContent=<{$content}>
<br>
totalPage=<{$totalNumber}>
<br>
pageNumber=<{$pageNumber}>
<br>
curPage=<{$curPage}>
<br>
<{$pageLinks}>
<br>
<{section name=n loop=$list}>
<{$list[n].guest_title}>
<BR>
<{/section}>
</body>
</html>
------------------------------------*/
}
?>