找了个SMARTY分页插件的例子,先放在这,抽时间看下:
<?php /** * Smarty plugin * @package Smarty * @subpackage plugins * @分页插件,robinhong于2008-09-09 * @example:{{page values=$RS_PAGE output="共有<span>%recordcount</span>条记录 每页<span>%pagesize</span>条记录 第<span>%pagenum</span>页/共%pagecount页 %first %prev %next %last %select %list" first="首页" prev="上页" next="下页" last="末页" select="第%pagenum页" list=5}} */ function smarty_function_page($params, &$smarty) { if (!isset($params['values']) && !isset($params['output'])) { $smarty->trigger_error("array: missing 'values' or 'output' parameter"); return; } if($params['values'] == '' || !is_array($params['values'])) { return $params['values']; } return page($params); } function page($a) { //select分页 $ps="<select name=/"GotoPage/" onChange=/"location=this.options[this.selectedIndex].value/">"; for($p=1;$p<=$a['values'][pagecount];$p++){ $Sel=""; if($a['values'][page]==$p){$Sel=" selected";} $ps=$ps."<option value=/"".$a['values'][pagelink].$p."/"$Sel>".str_replace("%pagenum",$p,$a['select'])."</option>"; } $ps=$ps."</select>"; //数字链接分页 if($a['list']>0) { $pageStart=$a['values'][page]>$a['list']?$a['values'][page]-$a['list']:1; $pageEnd=$a['values'][page]+$a['list']>$a['values'][pagecount]?$a['values'][pagecount]:$a['values'][page]+$a['list']; } else { $pageStart=1; $pageEnd=$a['values'][pagecount]; } for($p=$pageStart;$p<=$pageEnd;$p++){ if($a['values'][page]==$p){$pl=$pl."<span>".$p."</span>";} else{$pl=$pl." <a href=/"".$a['values'][pagelink].$p."/">".$p."</a> ";} } //上下页链接分页 if($a['values'][pagecount]>1) { if($a['values'][page]==1) { $pt=array($a['first'],$a['prev'],"<a href=/"".$a['values'][pagelink].intval($a['values'][page]+1)."/">".$a['next']."</a>","<a href=/"".$a['values'][pagelink].$a['values'][pagecount]."/">".$a['last']."</a>"); } elseif($a['values'][page]==$a['values'][pagecount]) { $pt=array("<a href=/"".$a['values'][pagelink]."1/">".$a['first']."</a>","<a href=/"".$a['values'][pagelink].intval($a['values'][page]-1)."/">".$a['prev']."</a> ",$a['next'],$a['last']); } else { $pt=array("<a href=/"".$a['values'][pagelink]."1/">".$a['first']."</a>","<a href=/"".$a['values'][pagelink].intval($a['values'][page]-1)."/">".$a['prev']."</a>","<a href=/"".$a['values'][pagelink].intval($a['values'][page]+1)."/">".$a['next']."</a>","<a href=/"".$a['values'][pagelink].$a['values'][pagecount]."/">".$a['last']."</a>"); } } else { $pt=array($a['first'],$a['prev'],$a['next'],$a['last']); } $out=$a['output']; $out=str_replace("%recordcount",$a['values'][recordcount],$out); $out=str_replace("%pagesize",$a['values'][pagesize],$out); $out=str_replace("%pagenum",$a['values'][page],$out); $out=str_replace("%pagecount",$a['values'][pagecount],$out); $out=str_replace("%first",$pt[0],$out); $out=str_replace("%prev",$pt[1],$out); $out=str_replace("%next",$pt[2],$out); $out=str_replace("%last",$pt[3],$out); $out=str_replace("%select",$ps,$out); $out=str_replace("%list",$pl,$out); return $out; } ?>Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。
smarty的插件有function, modifier, block, compiler,prefilter, postfilter, outputfilter, resource, insert等几种类型, 本文中我们只使用function型插件。
代码请看function.page.php
主要有三种分页效果,select分页,数字链接分页,上下页链接分页。
模板里调用示例
{{page values=$RS_PAGE output=”共有<span>%recordcount</span>条记录 每页<span>%pagesize</span>条记录 第<span>%pagenum</span>页/共%pagecount页 %first %prev %next %last %select %list” first=”首页” prev=”上页” next=”下页” last=”末页” select=”第%pagenum页” list=5}}
说明一下 values是要传入的分页数据信息,$RS_PAGE=$arrPage[recordcount,pagesize,page,pagecount,pagelink],分别是数据记录总数、每页记录数、当前页、总页数、分页链接文件。output是分页显示的效果,想要显示不同的分页效果直接在模板里修改这个参数的值就可以。
下面看一下实际效果
http://demo.robinhong.cn/smarty-page/smarty-page.php