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
这里简单讲一下分页逻辑的思路。
首先我们最终是要得到一个分页字符串用来显示,这个字符串大概组成部分类似这样:首页 上一页 数字链接 下一页 尾页,所以我们可以从左到右一部分一部分进行判断处理,最后拼接即可。
{if $totalpage>1}
<a href="{$url}">首页</a>
{if $page>1}
<a href="{$url}?page={$page-1}">上一页</a>
{/if}
//数字链接
{if $totalpage<$left+$right+1} //总页数小于数字链接长度时
//定义循环起始值
{assign var="start" value=1}
{assign var="end" value=$totalpage}
{else}
{assign var="start" value=$page-$left}
{assign var="end" value=$page+$right}
{if $page <= $left} //当前页左侧长度不足指定值时
{assign var="start" value=1}
{assign var="end" value=$left+$right+1}
{/if}
{if $page >= $totalpage- $right} //当前页右侧长度不足指定值时
{assign var="end" value=$totalpage}
{assign var="start" value=$totalpage-$left-$right}
{/if}
{/if}
//循环输出数字链接
{for $foo=$start to $end}
{if $page == $foo}
<a class="{$class}" href="{$url}?page={$foo}">{$foo}</a>
{else}
<a href="{$url}?page={$foo}">{$foo}</a>
{/if}
{/for}
{if $page<$totalpage}
<a href="{$url}?page={$page+1}">下一页</a>
{/if}
<a href="{$url}?page={$totalpage}">尾页</a>
{/if}
这样,一个简单的分页模板就完成了,它的优点是前端展示比较灵活,不足的是逻辑处理相对不太方便。
smarty分页模板(用模板语法写分页)的更多相关文章
- Flask 的 template模板 与 jinja2语法
Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...
- thinkPHP 模板中的语法知识 详细介绍(十二)
原文:thinkPHP 模板中的语法知识 详细介绍(十二) 本章节:介绍模板中的语法,详细的语法介绍 一.导入CSS和JS文件 ==>记住常量的是大写 1.css link .js sc ...
- asp.net 分页-自己写分页控件
去年就发表过asp.net 分页-利用后台直接生成html分页 ,那种方法只是单纯的实现了分页,基本不能使用,那时就想写个自己的分页控件,无奈能力有限.最近有点时间了,就自己做出了这个分页控件.我承认 ...
- Ajax写分页查询(实现不刷新页面)
获取数据库中大量的信息显示在页面上,必然要使用到分页查询: 若不使用Ajax,而是用其他的方法,肯定是要刷新页面的,用户体检很不好, 所以最好使用Ajax的方法写分页查询: 1.先来找一张数据很多的表 ...
- 用ajax写分页查询-----2017-05-17
要写分页,首先你得清楚,一页你想显示多少条信息?如何计算总共显示的页数? 先说一下思路: (1)从数据库读取数据,以chenai表为例,读取所有留言信息.并能够实现输入发送者,可以查询该发送者的留言总 ...
- python MVC、MTV 框架介绍 Django 模板系统常用语法
Django 框架简介一.MVC框架和MTV框架1.MVC 全名Model View Controller,是软件工程中的一种软件架构模式,把软件系统分为三个基本部分.优势: 耦合性低 重用性高 生命 ...
- django 常用方法总结 < 手写分页-上传头像-redis缓存,排行 ...>
1.不使用自带模块<Paginator>的手写分页功能views.pydef post_list(request): page = request.GET.get('page', 1) # ...
- (9)模板层 - templates(模板语言、语法、取值、过滤器、变量的使用)
django的模板语言:DTL 模板语言的变量传入 这个是标签 {{ 变量名 }} {{ 变量名 }} #模板语言的替换可以在模板中的任意位置生效 PS:通过 . 可以做深度查询 模板语言的过滤器 ...
- 如何用ajax写分页查询(以留言信息为例)-----2017-05-17
要写分页,首先你得清楚,一页你想显示多少条信息?如何计算总共显示的页数? 先说一下思路: (1)从数据库读取数据,以chenai表为例,读取所有留言信息.并能够实现输入发送者,可以查询该发送者的留言总 ...
随机推荐
- VMware 进入bios
在虚拟机创建目录中找到.vmx结尾的文件. 添加bios.forceSetupOnce = "TRUE". 打开虚拟机,他会自动进入bios,随后他会把bios.forceSetu ...
- 被 Windows 10 SDK 坑了
抓包抓到的配置文件与完整版的VS一致,虽然显示出来的只有 Windows 10 通用工具,我还以为是只更新这些(因为列出来的几个,我确实之前没装),就愉快地点了安装,结果……新建项目时,发现 Wind ...
- ARM 汇编指令
ARM汇编程序特点: l 所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通 ...
- 【poj2891-Strange Way to Express Integers】拓展欧几里得-同余方程组
http://poj.org/problem?id=2891 题意:与中国剩余定理不同,p%ai=bi,此处的ai(i=1 2 3 ……)是不一定互质的,所以要用到的是同余方程组,在网上看到有人称为拓 ...
- GET和POST测试(支持需要登录的接口调用:高级功能->填写cookie)
http://coolaf.com
- linux rpm命令
1.rpm 是红帽(RedHat)软件包管理工具,实现类似于 Windows 中的添加/删除程序功能. 2.rpm -ivh 软件包名 安装软件包并显示安装进度.这个是用得最多的了. 3. rpm - ...
- python 详解re模块
正则表达式的元字符有. ^ $ * ? { [ ] | ( ).表示任意字符[]用来匹配一个指定的字符类别,所谓的字符类别就是你想匹配的一个字符集,对于字符集中的字符可以理解成或的关系.^ 如果放在字 ...
- 一个国外网盘pCloud——支持离线下载
给大家分享一个国外网盘<支持离线下载> https://my.pcloud.com/#page=register&invite=HiegZ8aBrt7
- dojo新建widget步骤----主要针对widget路径
一,新建目录 二,新建文件 三,写urtil widget代码 四,写RedTextDialog代码 五,写HTML代码 =====================如有不懂,结合http://blog ...
- 【查找结构 2】二叉查找树 [BST]
当所有的静态查找结构添加和删除一个数据的时候,整个结构都需要重建.这对于常常需要在查找过程中动态改变数据而言,是灾难性的.因此人们就必须去寻找高效的动态查找结构,我们在这讨论一个非常常用的动态查找树— ...