1. 程式人生 > >Smarty的分頁實現

Smarty的分頁實現

inside fetch 數據 etc ber page arr quest vars

Smarty中的分頁有很多方法。
1。使用Smarty的分頁插件,如Pager,pagnition,sliding_page等,不過感覺都不是太好,幾乎都有一些Bug。
有興趣試用和自己去改進的朋友可以看看:
http://smarty.php.net/contribs/plugins/view.php/function.pager.php
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=2327
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=1604

2。使用分頁類庫,呵呵,這個網上就太多了,一大把,不過我還沒有發現寫得很好的,特別是容易擴展的。
在搜索的時候還看到一個號稱分頁類終結者的,哈哈,有點好笑。分頁類中把SQL都包含進去了,這個是絕對不能容忍的,可以說作者對OO的認識還比較淺。

不過分頁類庫不一定適合Smarty,特別是當記錄集數據是二維數組時,我不想放棄Smarty方便的Section。這是我沒有用PEAR::Pager的原因,否則還要先對數組進行處理,也很麻煩。

3。自己寫啦。。我暫時沒有選擇寫成類庫,不過改寫很容易,下面主要講講思路。

其實Smarty的分頁非常簡單,首先我們可以在模板中這樣實現:
{$pager_Links}
{section name="list" loop=$productID start=0 max=$pager_Total step=1}
{if ($smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )}
產品名稱:{$productName[list]}
產品類別:{$catalogName[list]}
{/if}
{/section}

以上就可以將一個記錄集(二維數組)輕松地打印出來,而且限定每頁的顯示範圍。
{$pager_Links} 分頁標簽(就是上一頁,下一頁等)
max=$pager_Total 記錄總數
$smarty.section.list.index >= $pager_StartNum )&& ($smarty.section.list.index <= $pager_EndNum )
這一行是用來限定記錄的顯示範圍的,如果記錄的索引落在這個範圍之內就顯示出來,否則就不顯示。

以上可以看出,在PHP文件中,我們只需要傳遞4個變量給Smarty對象:
1.記錄總數
2.每頁記錄起始數
3.每頁記錄結束數
4.分頁標簽

以下代碼代參考:
標簽可以自己去寫了,可以擴充成更強大的。現在我沒有時間,不然會寫一個
<?php
$smartyArr = $smarty->get_template_vars();

//記錄總數,每頁顯示記錄條數,總頁數
$pager_Total = count($smartyArr[‘productID‘]);
$pager_Size = 10;
$pager_Number = ceil($pager_Total/$pager_Size);
$pager_URL = "index.php?action=View";

//當前頁的頁數,從REQUEST獲得
if(isset($_GET[‘pager_PageID‘])&& !empty($_GET[‘pager_PageID‘])){
$pager_PageID = intval($_GET[‘pager_PageID‘]);
}else{
//第一次訪問
$pager_PageID = 1;
}

//每頁的起,始記錄數
if ($pager_PageID == 1 ) {
$pager_StartNum = 0;
} else {
$pager_StartNum = ($pager_PageID -1) * $pager_Size;
}

$pager_EndNum = $pager_StartNum + $pager_Size;

if ($pager_PageID == 1 && $pager_Number>1) {
//第一頁
$pager_Links = "上一頁 | <a href=".$pager_URL."&pager_PageID=".($pager_PageID+1).">下一頁</a>";
} elseif($pager_PageID == $pager_Number && $pager_Number>1) {
//最後一頁
$pager_Links = "<a href=".$pager_URL."&pager_PageID=".($pager_PageID-1).">上一頁</a> | 下一頁";
} elseif ($pager_PageID > 1 && $pager_PageID <= $pager_Number) {
//中間
$pager_Links = "<a href=".$pager_URL."&pager_PageID=".($pager_PageID-1).">上一頁</a> | <a href=".$pager_URL."&pager_PageID=".($pager_PageID+1).">下一頁</a>";
} else {
$pager_Links = "上一頁 | 下一頁";
}

$smarty->assign(‘pager_Total‘,$pager_Total);
$smarty->assign(‘pager_StartNum‘,$pager_StartNum);
$smarty->assign(‘pager_EndNum‘,$pager_EndNum);
$smarty->assign(‘pager_Links‘,$pager_Links);

return $smarty->fetch ("list.tpl");
?>

轉自:https://blog.csdn.net/haohappy2004/article/details/510196

Smarty的分頁實現