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表为例,读取所有留言信息.并能够实现输入发送者,可以查询该发送者的留言总 ...
随机推荐
- LCT小结
LCT真是灵活好用… LCT的基本思想与树链剖分差不多,都是把树剖成一条条链,只不过LCT用的是SPLAY维护的,而且,SPLAY的链是会变化的,不像剖分是定死的. LCT最重要的操作就是access ...
- pyhton Chapter3 读文件
使用内置函数open()打开文件,data=open("1.txt").利用data.close()关闭文件.利用data.readline()读取文件中的一行数据,然后指示读取文 ...
- Java开发WebService的几种方法--转载
webservice的应用已经越来越广泛了,下面介绍几种在Java体系中开发webservice的方式,相当于做个记录. 1.Axis2 Axis是apache下一个开源的webservice开发组件 ...
- AIZU 2251
Merry Christmas Time Limit : 8 sec, Memory Limit : 65536 KB Problem J: Merry Christmas International ...
- linux 下各个工具使用(screen、tmux,pyenv、virtualenv,pip国内源,tree)
一.多会话工具screen.tmux 两个都是多窗口工具.1.使用后wim出现配色问题:http://ibartman.com/2014/04/16/vim%20%E9%85%8D%E8%89%B2/ ...
- D&F学数据结构系列——AVL树(平衡二叉树)
AVL树(带有平衡条件的二叉查找树) 定义:一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树. 为什么要使用AVL树(即为什么要给二叉查找树增加平衡条件),已经在我之前的博文中说到过 ...
- HDU 1548 A strange lift (Dijkstra)
A strange lift http://acm.hdu.edu.cn/showproblem.php?pid=1548 Problem Description There is a strange ...
- URAL 1586 Threeprime Numbers(DP)
题目链接 题意 : 定义Threeprime为它的任意连续3位上的数字,都构成一个3位的质数. 求对于一个n位数,存在多少个Threeprime数. 思路 : 记录[100, 999]范围内所有素数( ...
- hdu 4726 Kia's Calculation
思路:刚开始想复杂了. 看解题报告后才知道这题挺简单的,看来还是要多训练啊!!! 单独处理首位的数字,不能为0.其他的就好处理了,从大到小依次找下去就可以了…… 代码如下: #include<i ...
- 关于linux下rar文件的解压缩操作
在linux系统下.本身没有对rar文件操作的命令,如果需要对rar格式的文件操作,我们需要安装第三方的软件rar以及unrar. 1.linux下rar管理软件下载的官方地址为:http://www ...