簡化php模板頁面中分頁代碼的解析
更新時(shí)間:2009年02月06日 02:27:52 作者:
這篇文章主要是針對(duì)“使用模板的情況”寫的,
但是這種方法適合于任何的場合,在任何情況下都是一種比較好的解決方案
在使用模板的時(shí)候,會(huì)遇到這么一個(gè)問題:顯示分頁信息時(shí)操作麻煩,n多個(gè)模板都有分頁塊。
例如:
---共 20 條記錄,當(dāng)前 3/5 頁 首頁 上一頁 下一頁 尾頁 GO-----
初遇到這個(gè)問題的道友,在考慮解決這個(gè)問題的時(shí)候好像都是在打php的主意,考慮怎么用php來實(shí)現(xiàn),但是不管你是怎么設(shè)計(jì)都后設(shè)計(jì)成兩種方案
1、用嵌套循環(huán)來實(shí)現(xiàn)
2、用n多個(gè)判斷來搞
但是最終還是比較麻煩的,而且解析的時(shí)候是用的服務(wù)器端的資源。
不妨換個(gè)方法用javascript來代替你的php?。。。?,這樣即可減少php腳本的代碼量,還可以把解析分頁的工作交給客戶端自己來作。不過javascript調(diào)試起來可能會(huì)比較麻煩。
最重要的是可以簡化分頁顯示時(shí),解析模板遇到的痛苦。
下面用一個(gè)支持pear的itx模板工具解析的模板.
其中<!-- BEGIN page -->和<!-- END page -->表示一個(gè)塊,{recordcount}這種類似的字符串是變量。
----------------list.tpl---------------------
//其它的html代碼
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
<TR>
<TD align="right" nowrap>
<script src="images/page.js" src="images/page.js" language="javascript"></script>
<script language="javascript"><!--
BEGIN page -->
recordCount = {recordcount};
show = {showinonepage}
pageCount = {pagecount};
pageNow = {page};
pageStr = "?page=_page_";
document.write(showListPage0(recordCount, show, pageCount, pageNow, pageStr));
<!-- END page
// --></script>
</TD>
</TR>
</TABLE>
//其它的html代碼
--------------------page.js------------
//---------------共 20 條記錄,當(dāng)前 3/5 頁 首頁 上一頁 下一頁 尾頁 GO-------------------
//recordCount = 20;
//show = 20
//pageCount = 5;
//pageNow = 3;
//pageStr = "?page=_page_";
//document.write(showListPage(recordCount, show, pageCount, pageNow, pageStr));
function showListPage0(recordCount, show, pageCount, pageNow, pageStr){
if(pageCount<1) pageCount =0;
if(pageNow<1) pageNow = 0;
str = '<form name="frmpage">共 <B>'+recordCount+'</B> 條記錄,當(dāng)前 <B>'+pageNow+'/'+pageCount+'</B> 頁';
if(pageNow<=1)
str += " 首頁 ";
else
str += " <A href=""+pageStr.replace("_page_",1)+"" href=""+pageStr.replace("_page_",1)+"">首頁</A> ";
if(pageNow<=1)
str += " 上一頁 ";
else
str += " <A href=""+pageStr.replace("_page_",(pageNow-1))+"" href=""+pageStr.replace("_page_",(pageNow-1))+"">上一頁</A> ";
if(pageNow>=pageCount)
str += " 下一頁 ";
else
str += " <A href=""+pageStr.replace("_page_",(pageNow+1))+"" href=""+pageStr.replace("_page_",(pageNow+1))+"">下一頁</A> ";
if(pageNow>=pageCount)
str += " 尾頁 ";
else
str += " <A href=""+pageStr.replace("_page_",pageCount)+"" href=""+pageStr.replace("_page_",pageCount)+"">尾頁</A> ";
str += "跳到<input type=\"text\" name=\"txtpage\" size=\"3\">頁";
str += "<input type=\"button\" value=\"GO\" onclick=\"pagego0(document.frmpage.txtpage.value,"+pageNow+","+pageCount+",'"+pageStr+"')\"></form>";
return str;
}
function pagego0(pageGo,pageNow,pageCount,pageStr){
if(pageGo>=1 && pageGo<=pageCount && pageNow!=pageGo)
window.location = pageStr.replace("_page_", pageGo);
}
另外這種方法即使不用模板,也可以用,也一樣是一種好的分頁解決方案,只要將{recordcount}這種類似的字符串用變量的值替換就可以了。
例如:
---共 20 條記錄,當(dāng)前 3/5 頁 首頁 上一頁 下一頁 尾頁 GO-----
初遇到這個(gè)問題的道友,在考慮解決這個(gè)問題的時(shí)候好像都是在打php的主意,考慮怎么用php來實(shí)現(xiàn),但是不管你是怎么設(shè)計(jì)都后設(shè)計(jì)成兩種方案
1、用嵌套循環(huán)來實(shí)現(xiàn)
2、用n多個(gè)判斷來搞
但是最終還是比較麻煩的,而且解析的時(shí)候是用的服務(wù)器端的資源。
不妨換個(gè)方法用javascript來代替你的php?。。。?,這樣即可減少php腳本的代碼量,還可以把解析分頁的工作交給客戶端自己來作。不過javascript調(diào)試起來可能會(huì)比較麻煩。
最重要的是可以簡化分頁顯示時(shí),解析模板遇到的痛苦。
下面用一個(gè)支持pear的itx模板工具解析的模板.
其中<!-- BEGIN page -->和<!-- END page -->表示一個(gè)塊,{recordcount}這種類似的字符串是變量。
----------------list.tpl---------------------
復(fù)制代碼 代碼如下:
//其它的html代碼
<TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
<TR>
<TD align="right" nowrap>
<script src="images/page.js" src="images/page.js" language="javascript"></script>
<script language="javascript"><!--
BEGIN page -->
recordCount = {recordcount};
show = {showinonepage}
pageCount = {pagecount};
pageNow = {page};
pageStr = "?page=_page_";
document.write(showListPage0(recordCount, show, pageCount, pageNow, pageStr));
<!-- END page
// --></script>
</TD>
</TR>
</TABLE>
//其它的html代碼
--------------------page.js------------
//---------------共 20 條記錄,當(dāng)前 3/5 頁 首頁 上一頁 下一頁 尾頁 GO-------------------
//recordCount = 20;
//show = 20
//pageCount = 5;
//pageNow = 3;
//pageStr = "?page=_page_";
//document.write(showListPage(recordCount, show, pageCount, pageNow, pageStr));
function showListPage0(recordCount, show, pageCount, pageNow, pageStr){
if(pageCount<1) pageCount =0;
if(pageNow<1) pageNow = 0;
str = '<form name="frmpage">共 <B>'+recordCount+'</B> 條記錄,當(dāng)前 <B>'+pageNow+'/'+pageCount+'</B> 頁';
if(pageNow<=1)
str += " 首頁 ";
else
str += " <A href=""+pageStr.replace("_page_",1)+"" href=""+pageStr.replace("_page_",1)+"">首頁</A> ";
if(pageNow<=1)
str += " 上一頁 ";
else
str += " <A href=""+pageStr.replace("_page_",(pageNow-1))+"" href=""+pageStr.replace("_page_",(pageNow-1))+"">上一頁</A> ";
if(pageNow>=pageCount)
str += " 下一頁 ";
else
str += " <A href=""+pageStr.replace("_page_",(pageNow+1))+"" href=""+pageStr.replace("_page_",(pageNow+1))+"">下一頁</A> ";
if(pageNow>=pageCount)
str += " 尾頁 ";
else
str += " <A href=""+pageStr.replace("_page_",pageCount)+"" href=""+pageStr.replace("_page_",pageCount)+"">尾頁</A> ";
str += "跳到<input type=\"text\" name=\"txtpage\" size=\"3\">頁";
str += "<input type=\"button\" value=\"GO\" onclick=\"pagego0(document.frmpage.txtpage.value,"+pageNow+","+pageCount+",'"+pageStr+"')\"></form>";
return str;
}
function pagego0(pageGo,pageNow,pageCount,pageStr){
if(pageGo>=1 && pageGo<=pageCount && pageNow!=pageGo)
window.location = pageStr.replace("_page_", pageGo);
}
另外這種方法即使不用模板,也可以用,也一樣是一種好的分頁解決方案,只要將{recordcount}這種類似的字符串用變量的值替換就可以了。
相關(guān)文章
PHP正則匹配操作簡單示例【preg_match_all應(yīng)用】
這篇文章主要介紹了PHP正則匹配操作,結(jié)合簡單實(shí)例形式分析了php中preg_match_all針對(duì)HTML標(biāo)簽中P元素及img src元素內(nèi)容的獲取技巧,需要的朋友可以參考下2017-07-07
Larave框架通過sanctum進(jìn)行API鑒權(quán)詳解
Laravel是一套簡潔、優(yōu)雅的PHP WEB開發(fā)框架(PHP Web Framework),具有富于表達(dá)性且簡潔的語法,Laravel是易于理解且強(qiáng)大的,它提供了強(qiáng)大的工具用以開發(fā)大型,健壯的應(yīng)用,例如具有自動(dòng)驗(yàn)證、路由、Session、緩存、數(shù)據(jù)庫遷移工具、單元測試等常用的工具和功能2022-07-07
PHP將二維數(shù)組某一個(gè)字段相同的數(shù)組合并起來的方法
這篇文章主要介紹了PHP將二維數(shù)組某一個(gè)字段相同的數(shù)組合并起來的方法,涉及PHP多維數(shù)組操作的相關(guān)技巧,需要的朋友可以參考下2016-02-02
PHP curl 獲取響應(yīng)的狀態(tài)碼的方法
PHP curl可以從服務(wù)器端模擬一個(gè)http請(qǐng)求,例如抓取網(wǎng)頁、模擬登陸等,想要獲取狀態(tài)碼,需要在執(zhí)行curl_exec后再通過curl_getinfo來獲取2014-01-01
PHP4和PHP5性能測試和對(duì)比 測試代碼與環(huán)境
PHP4和PHP5性能測試和對(duì)比 測試代碼與環(huán)境...2007-08-08
PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之接口的繼承定義與用法詳解
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之接口的繼承定義與用法,結(jié)合實(shí)例形式分析了php接口的概念、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-12-12
php讀取csv數(shù)據(jù)保存到數(shù)組的方法
這篇文章主要介紹了php讀取csv數(shù)據(jù)保存到數(shù)組的方法,通過封裝的類文件實(shí)現(xiàn)這一功能,是對(duì)csv文件操作的實(shí)用技巧,需要的朋友可以參考下2015-01-01

