再谈***分页显示***问题(主要用于模板)

------------------------
------------------------
这篇文章主要是针对“使用模板的情况”写的,
但是这种方法适合于任何的场合,在任何情况下都是一种比较好的解决方案
------------------------
------------------------
在使用模板的时候,会遇到这么一个问题:显示分页信息时操作麻烦,n多个模板都有分页块。
例如:
---共 20 条记录,当前 3/5 页 首页 上一页 下一页 尾页 GO-----
初遇到这个问题的道友,在考虑解决这个问题的时候好像都是在打php的主意,考虑怎么用php来实现,但是不管你是怎么设计都后设计成两种方案
1、用嵌套循环来实现
2、用n多个判断来搞
但是最终还是比较麻烦的,而且解析的时候是用的服务器端的资源。

不妨换个方法用javascript来代替你的php!!!!,这样即可减少php脚本的代码量,还可以把解析分页的工作交给客户端自己来作。不过javascript调试起来可能会比较麻烦。
最重要的是可以简化分页显示时,解析模板遇到的痛苦。
下面用一个支持pear的itx模板工具解析的模板.
其中

表示一个块,{recordcount}这种类似的字符串是变量。

----------------list.tpl---------------------
//其它的html代码

 1<table border="0" cellpadding="0" cellspacing="0" width="100%">
 2<tr>
 3<td align="right" nowrap="">
 4<script language="javascript" src="images/page.js"></script>
 5<script language="javascript">   
 6<!-- BEGIN page -->   
 7recordCount = {recordcount};   
 8show = {showinonepage}   
 9pageCount = {pagecount};   
10pageNow = {page};   
11pageStr = "?page=_page_";   
12document.write(showListPage0(recordCount, show, pageCount, pageNow, pageStr));   
13<!-- END page -->   
14</script>
15</td>
16</tr>
17</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 = '

 1<form name="frmpage">共 <b>'+recordCount+'</b> 条记录,当前 <b>'+pageNow+'/'+pageCount+'</b> 页';   
 2if(pageNow&lt;=1)   
 3str += " 首页 ";   
 4else   
 5str += " <a href='"+pageStr.replace("_page_",1)+"'>首页</a> ";   
 6if(pageNow&lt;=1)   
 7str += " 上一页 ";   
 8else   
 9str += " <a href='"+pageStr.replace("_page_",(pageNow-1))+"'>上一页</a> ";   
10if(pageNow&gt;=pageCount)   
11str += " 下一页 ";   
12else   
13str += " <a href='"+pageStr.replace("_page_",(pageNow+1))+"'>下一页</a> ";   
14if(pageNow&gt;=pageCount)   
15str += " 尾页 ";   
16else   
17str += " <a href='"+pageStr.replace("_page_",pageCount)+"'>尾页</a> ";   
18str += "跳到<input name='\"txtpage\"' size='\"3\"' type='\"text\"'/>页";   
19str += "<input onclick="\&quot;pagego0(document.frmpage.txtpage.value,&quot;+pageNow+&quot;,&quot;+pageCount+&quot;,'&quot;+pageStr+&quot;')\&quot;" type='\"button\"' value='\"GO\"'/></form>

";
return str;
}
function pagego0(pageGo,pageNow,pageCount,pageStr){
if(pageGo>=1 && pageGo<=pageCount && pageNow!=pageGo)
window.location = pageStr.replace("page", pageGo);
}

----------------------------
另外这种方法即使不用模板,也可以用,也一样是一种好的分页解决方案,只要将{recordcount}这种类似的字符串用变量的值替换就可以了。
----------------------------
---------------------------------------------------------------

---------------------------------------------------------------

up

-----------------
我写的分页函数:

$maxpage)$page = $maxpage; $start = ($page - 1) * $pagesize; //起始点 $areapage = ceil($page / $area); //第几区 $prevPage = ($areapage - 2) * $area + 1; //上一区第一页 $nextPage = $areapage * $area + 1; //下一区第一页 $startpage = ($areapage - 1) * $area + 1; //本区起始页 if($prevPage>0) $thepage= " ``` [<<] ``` "; for($i=$startpage; $i<$startpage + $area; $i++) { if($i>$maxpage)break; if($i==$page)$thepage.= " ``` [$i] ``` "; else $thepage.= " ``` [$i] ``` "; } if($nextPage<=$maxpage) $thepage.= " ``` [>>] ``` "; $result["thepage"] = $thepage; $result["total"] = $count; $result["start"] = $start; $result["page"] = $page; $result["maxpage"] = $maxpage; return $result; } //在模板调用时只需 $pageinfo = echo_page_info("xxxx.php", $page, $count, $pagesize); $xtpl->assign("page", $pageinfo); ?> xxxx.html模板页: 共 {page.total} 条/ {page.maxpage} 页 目前为第 {page.page} 页 分页: {page.thepage}
Published At
Categories with Web编程
Tagged with
comments powered by Disqus