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表为例,读取所有留言信息.并能够实现输入发送者,可以查询该发送者的留言总 ...
随机推荐
- PHP 使用 Redis
PHP 使用 Redis 安装 开始在 PHP 中使用 Redis 前, 我们需要确保已经安装了 redis 服务及 PHP redis 驱动,且你的机器上能正常使用 PHP. 接下来让我们安装 PH ...
- HDU 2846 Repository(字典树,标记)
题目 字典树,注意初始化的位置~!!位置放错,永远也到不了终点了org.... 我是用数组模拟的字典树,这就要注意内存开多少了,,要开的不大不小刚刚好真的不容易啊.... 我用了val来标记是否是同一 ...
- 有趣 GIF 动图集 - 仿佛每张小动图都诉说了一个小笑话或者小故事
点这里 来自法国南特(Nantes)的 Guillaume Kurkdjian 目前还是个学生.Kurkdjian 擅长创作一些平面动态图像,这些有趣的小动图仿佛每张都诉说了一个小笑话或者小故事,像个 ...
- HDU 1385 Minimum Transport Cost (Dijstra 最短路)
Minimum Transport Cost http://acm.hdu.edu.cn/showproblem.php?pid=1385 Problem Description These are ...
- DB2 DATE类型在显示的时候,带有00:00:00,去掉的方法,使用VARCHAR()函数
DROP VIEW DMS.V_AQ_INSURANCECLAIMS; CREATE VIEW DMS.V_AQ_INSURANCECLAIMS AS SELECT * FROM (SELECT T1 ...
- spring_150804_controller
实体类: package com.spring.model; public class DogPet { private int id; private String name; private in ...
- Gradle Goodness: Continue Build Even with Failed Tasks
If we run a Gradle build and one of the tasks fails, the whole build stops immediately. So we have f ...
- C++运算符重载——重载特殊运算符
1.重载赋值运算符= 赋值运算符用于同类对象间的相互赋值.赋值运算符只能被重载为类的非静态成员函数,不能重载为友元函数和普通函数. 对于用户自定义的类而言,如果没有重载赋值运算符,那么C++编译器会为 ...
- Linux下TOmcat调试命令
1.显示linux系统的环境变量:env命令,会显示JAVA_HOME,Catalina,CLASSPATH等系统变量 2.
- Spring笔记——Spring+JDBC组合开发
使用Spring+JDBC集成步骤如下: 1. 配置数据源 2. 配置事务.配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间,事务的配置方式有两种:注解方式和基于XML配置方式 ...