smarty分页模板(用模板语法写分页)
分页是一个我们经常要用到的、比较基本的小功能,你可以通过定义一个方法或类来对它进行封装、重用。而本文则是通过利用smarty独有的语法,以模版的方式进行封装,从而达到同样的目的。
下面开始具体实现步骤:
首先,创建3个文件,a.php(赋值变量,调用模版a.tpl),a.tpl(包含模版page.tpl,并传递变量)和page.tpl(具体分页逻辑实现)
a.php
1 //变量处理 2 ...... ......省略 3 ...... ......省略 4 5 //赋值 6 $smarty->assign('count', $count); //记录总数 7 $smarty->assign('pagesize', $pagesize); //每页记录数 8 $smarty->assign('totalpage', $totalpage); //总页数 9 $smarty->assign('page', $page); //当前页数 10 $smarty->assign('url', $url); //链接地址 11 $smarty->assign('class', $class); //当前页样式类名 12 $smarty->assign('left', $left); //数字链接左侧长度 13 $smarty->assign('right', $right); //数字链接右侧长度 14 15 //显示 16 $smarty->display('a.tpl');
a.tpl
1 //循环输出每条内容 2 ...... ...... ......省略 3 4 //传递变量 5 {include 'page.tpl' count=$count pagesize=$pagesize totalpage=$totalpage page=$page url=$url class=$class left=$left right=$right}
page.tpl
这里简单讲一下分页逻辑的思路。
首先我们最终是要得到一个分页字符串用来显示,这个字符串大概组成部分类似这样:首页 上一页 数字链接 下一页 尾页,所以我们可以从左到右一部分一部分进行判断处理,最后拼接即可。
1 {if $totalpage>1} 2 <a href="{$url}">首页</a> 3 4 {if $page>1} 5 <a href="{$url}?page={$page-1}">上一页</a> 6 {/if} 7 8 //数字链接 9 {if $totalpage<$left+$right+1} //总页数小于数字链接长度时 10 //定义循环起始值 11 {assign var="start" value=1} 12 {assign var="end" value=$totalpage} 13 {else} 14 {assign var="start" value=$page-$left} 15 {assign var="end" value=$page+$right} 16 {if $page <= $left} //当前页左侧长度不足指定值时 17 {assign var="start" value=1} 18 {assign var="end" value=$left+$right+1} 19 {/if} 20 {if $page >= $totalpage- $right} //当前页右侧长度不足指定值时 21 {assign var="end" value=$totalpage} 22 {assign var="start" value=$totalpage-$left-$right} 23 {/if} 24 {/if} 25 //循环输出数字链接 26 {for $foo=$start to $end} 27 {if $page == $foo} 28 <a class="{$class}" href="{$url}?page={$foo}">{$foo}</a> 29 {else} 30 <a href="{$url}?page={$foo}">{$foo}</a> 31 {/if} 32 {/for} 33 34 {if $page<$totalpage} 35 <a href="{$url}?page={$page+1}">下一页</a> 36 {/if} 37 38 <a href="{$url}?page={$totalpage}">尾页</a> 39 {/if}
这样,一个简单的分页模板就完成了,它的优点是前端展示比较灵活,不足的是逻辑处理相对不太方便。