简化php模板页面中分页代码的解析
程序员文章站
2022-05-25 21:11:53
在使用模板的时候,会遇到这么一个问题:显示分页信息时操作麻烦,n多个模板都有分页块。 例如: ---共 20 条记录,当前 3/5 页 首页 上一页 下一页 尾页 go--...
在使用模板的时候,会遇到这么一个问题:显示分页信息时操作麻烦,n多个模板都有分页块。
例如:
---共 20 条记录,当前 3/5 页 首页 上一页 下一页 尾页 go-----
初遇到这个问题的道友,在考虑解决这个问题的时候好像都是在打php的主意,考虑怎么用php来实现,但是不管你是怎么设计都后设计成两种方案
1、用嵌套循环来实现
2、用n多个判断来搞
但是最终还是比较麻烦的,而且解析的时候是用的服务器端的资源。
不妨换个方法用javascript来代替你的php!!!!,这样即可减少php脚本的代码量,还可以把解析分页的工作交给客户端自己来作。不过javascript调试起来可能会比较麻烦。
最重要的是可以简化分页显示时,解析模板遇到的痛苦。
下面用一个支持pear的itx模板工具解析的模板.
其中<!-- begin page -->和<!-- end page -->表示一个块,{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 条记录,当前 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> 条记录,当前 <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 条记录,当前 3/5 页 首页 上一页 下一页 尾页 go-----
初遇到这个问题的道友,在考虑解决这个问题的时候好像都是在打php的主意,考虑怎么用php来实现,但是不管你是怎么设计都后设计成两种方案
1、用嵌套循环来实现
2、用n多个判断来搞
但是最终还是比较麻烦的,而且解析的时候是用的服务器端的资源。
不妨换个方法用javascript来代替你的php!!!!,这样即可减少php脚本的代码量,还可以把解析分页的工作交给客户端自己来作。不过javascript调试起来可能会比较麻烦。
最重要的是可以简化分页显示时,解析模板遇到的痛苦。
下面用一个支持pear的itx模板工具解析的模板.
其中<!-- begin page -->和<!-- end page -->表示一个块,{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 条记录,当前 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> 条记录,当前 <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}这种类似的字符串用变量的值替换就可以了。