一个简单的beego分页小插件(源代码在最下面):

支持条件查询

支持参数保留

支持自定义css样式

支持表/视图

支持参数自定义 默认为pno

支持定义生成链接的个数

使用方式:

1)action中,引入包,然后如下使用:

/**
* 日志列表
*/
func (this *LogController) List() {
pno, _ := this.GetInt("pno") //获取当前请求页
var tlog []m.Tb_log
var conditions string = " order by id desc" //定义日志查询条件,格式为 " and name='zhifeiya' and age=12 "
var po pager.PageOptions //定义一个分页对象
po.TableName = "tb_log" //指定分页的表名
po.EnableFirstLastLink = true //是否显示首页尾页 默认false
po.EnablePreNexLink = true //是否显示上一页下一页 默认为false
po.Conditions = conditions // 传递分页条件 默认全表
po.Currentpage = int(pno) //传递当前页数,默认为1
po.PageSize = //页面大小 默认为20 //返回分页信息,
//第一个:为返回的当前页面数据集合,ResultSet类型
//第二个:生成的分页链接
//第三个:返回总记录数
//第四个:返回总页数
rs, pagerhtml, totalItem, _ := pager.GetPagerLinks(&po, this.Ctx)
rs.QueryRows(&tlog) //把当前页面的数据序列化进一个切片内
this.Data["list"] = tlog //把当前页面的数据传递到前台
this.Data["pagerhtml"] = pagerhtml
this.Data["totalItem"] = totalItem
this.Data["PageSize"] = po.PageSize
this.TplNames = "cms/log/list.html"
}

2)视图代码:

class="default" 是分页样式,可根据实际情况设置
  <div class="default"><span>共{{.totalItem}}记录</span>
<div style="float:left;">{{.pagerhtml}}</div>
</div>

效果图片:

  <div class="meneame"><span>共{{.totalItem}}记录</span>
<div style="float:left;">{{.pagerhtml}}</div>
</div>

效果图片:

分页源代码:

package pager

/**
* 分页功能
* 支飞亚
* 2014-9-1
*/
import (
// "fmt"
"github.com/astaxie/beego/context"
"github.com/astaxie/beego/orm"
html "html/template"
con "strconv"
"strings"
"time"
) type PageOptions struct {
TableName string //表名 -----------------[必填]
Conditions string //条件
Currentpage int //当前页 ,默认1 每次分页,必须在前台设置新的页数,不设置始终默认1.在控制器中使用方式:cp, _ := this.GetInt("pno") po.Currentpage = int(cp)
PageSize int //页面大小,默认20
LinkItemCount int //生成A标签的个数 默认10个
Href string //A标签的链接地址 ---------[不需要设置]
ParamName string //参数名称 默认是pno
FirstPageText string //首页文字 默认"首页"
LastPageText string //尾页文字 默认"尾页"
PrePageText string //上一页文字 默认"上一页"
NextPageText string //下一页文字 默认"下一页"
EnableFirstLastLink bool //是否启用首尾连接 默认false 建议开启
EnablePreNexLink bool //是否启用上一页,下一页连接 默认false 建议开启
} /**
* 分页函数,适用任何表
* 返回 总记录条数,总页数,以及当前请求的数据RawSeter,调用中需要"rs.QueryRows(&tblog)"就行了 --tblog是一个Tb_log对象
* 参数:表名,当前页数,页面大小,条件(查询条件,格式为 " and name='zhifeiya' and age=12 ")
*/
func GetPagesInfo(tableName string, currentpage int, pagesize int, conditions string) (int, int, orm.RawSeter) {
if currentpage <= {
currentpage =
}
if pagesize == {
pagesize =
}
var rs orm.RawSeter
o := orm.NewOrm()
var totalItem, totalpages int = , //总条数,总页数
o.Raw("SELECT count(*) FROM " + tableName + " where 1>0 " + conditions).QueryRow(&totalItem) //获取总条数
if totalItem <= pagesize {
totalpages =
} else if totalItem > pagesize {
temp := totalItem / pagesize
if (totalItem % pagesize) != {
temp = temp +
}
totalpages = temp
}
rs = o.Raw("select * from " + tableName + " where id >0 " + conditions + " LIMIT " + con.Itoa((currentpage-)*pagesize) + "," + con.Itoa(pagesize))
return totalItem, totalpages, rs
} /**
* 返回总记录条数,总页数,当前页面数据,分页html
* 根据分页选项,生成分页连接 下面是一个实例:
func (this *MainController) Test() {
var po util.PageOptions
po.EnablePreNexLink = true
po.EnableFirstLastLink = true
po.LinkItemCount = 7
po.TableName = "help_topic"
cp, _ := this.GetInt("pno")
po.Currentpage = int(cp)
_,_,_ pager := util.GetPagerLinks(&po, this.Ctx)
this.Data["Email"] = html.HTML(pager)
this.TplNames = "test.html"
}
*/
func GetPagerLinks(po *PageOptions, ctx *context.Context) (int, int, orm.RawSeter, html.HTML) {
var str string = ""
totalItem, totalpages, rs := GetPagesInfo(po.TableName, po.Currentpage, po.PageSize, po.Conditions)
po = setDefault(po, totalpages)
DealUri(po, ctx)
if totalpages <= po.LinkItemCount {
str = fun1(po, totalpages) //显示完全 12345678910
} else if totalpages > po.LinkItemCount {
if po.Currentpage < po.LinkItemCount {
str = fun2(po, totalpages) //123456789...200
} else {
if po.Currentpage+po.LinkItemCount < totalpages {
str = fun3(po, totalpages)
} else {
str = fun4(po, totalpages)
}
}
}
return totalItem, totalpages, rs, html.HTML(str)
} /**
* 处理url,目的是保存参数
*/
func DealUri(po *PageOptions, ctx *context.Context) {
uri := ctx.Request.RequestURI
var rs string
if strings.Contains(uri, "?") {
arr := strings.Split(uri, "?")
rs = arr[] + "?" + po.ParamName + "time=" + con.Itoa(time.Now().Second())
arr2 := strings.Split(arr[], "&")
for _, v := range arr2 {
if !strings.Contains(v, po.ParamName) {
rs += "&" + v
}
}
} else {
rs = uri + "?" + po.ParamName + "time=" + con.Itoa(time.Now().Second())
}
po.Href = rs
} /**
* 1...197 198 199 200
*/
func fun4(po *PageOptions, totalpages int) string {
var rs string = ""
rs += getHeader(po, totalpages)
rs += "<a href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa() + "'>" + con.Itoa() + "</a>"
rs += "<a href=''>...</a>"
for i := totalpages - po.LinkItemCount; i <= totalpages; i++ {
if po.Currentpage != i {
rs += "<a href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(i) + "'>" + con.Itoa(i) + "</a>"
} else {
rs += "<span class=\"current\">" + con.Itoa(i) + "</span>"
}
}
rs += getFooter(po, totalpages)
return rs } /**
* 1...6 7 8 9 10 11 12 13 14 15... 200
*/
func fun3(po *PageOptions, totalpages int) string {
var rs string = ""
rs += getHeader(po, totalpages)
rs += "<a href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa() + "'>" + con.Itoa() + "</a>"
rs += "<a href=''>...</a>"
for i := po.Currentpage - po.LinkItemCount/ + ; i <= po.Currentpage+po.LinkItemCount/-; i++ {
if po.Currentpage != i {
rs += "<a href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(i) + "'>" + con.Itoa(i) + "</a>"
} else {
rs += "<span class=\"current\">" + con.Itoa(i) + "</span>"
}
}
rs += "<a href=''>...</a>"
rs += "<a href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(totalpages) + "'>" + con.Itoa(totalpages) + "</a>"
rs += getFooter(po, totalpages)
return rs } /**
* totalpages > po.LinkItemCount po.Currentpage < po.LinkItemCount
* 123456789...200
*/
func fun2(po *PageOptions, totalpages int) string {
var rs string = ""
rs += getHeader(po, totalpages)
for i := ; i <= po.LinkItemCount+; i++ {
if i == po.LinkItemCount {
rs += "<a href=\"" + po.Href + "&" + po.ParamName + "=" + con.Itoa(i) + "\">...</a>"
} else if i == po.LinkItemCount+ {
rs += "<a href=\"" + po.Href + "&" + po.ParamName + "=" + con.Itoa(totalpages) + "\">" + con.Itoa(totalpages) + "</a>"
} else {
if po.Currentpage != i {
rs += "<a href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(i) + "'>" + con.Itoa(i) + "</a>"
} else {
rs += "<span class=\"current\">" + con.Itoa(i) + "</span>"
}
}
}
rs += getFooter(po, totalpages)
return rs
} /**
* totalpages <= po.LinkItemCount
* 显示完全 12345678910
*/
func fun1(po *PageOptions, totalpages int) string { var rs string = ""
rs += getHeader(po, totalpages)
for i := ; i <= totalpages; i++ {
if po.Currentpage != i {
rs += "<a href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(i) + "'>" + con.Itoa(i) + "</a>"
} else {
rs += "<span class=\"current\">" + con.Itoa(i) + "</span>"
}
}
rs += getFooter(po, totalpages)
return rs
} /**
* 头部
*/
func getHeader(po *PageOptions, totalpages int) string {
var rs string = "<div>"
if po.EnableFirstLastLink { //当首页,尾页都设定的时候,就显示 rs += "<a " + judgeDisable(po, totalpages, ) + " href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa() + "'>" + po.FirstPageText + "</a>"
}
if po.EnablePreNexLink { // disabled=\"disabled\"
var a int = po.Currentpage -
if po.Currentpage == {
a =
}
rs += "<a " + judgeDisable(po, totalpages, ) + " href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(a) + "'>" + po.PrePageText + "</a>"
}
return rs
} /**
* 尾部
*/
func getFooter(po *PageOptions, totalpages int) string {
var rs string = ""
if po.EnablePreNexLink {
var a int = po.Currentpage +
if po.Currentpage == totalpages {
a = totalpages
}
rs += "<a " + judgeDisable(po, totalpages, ) + " href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(a) + "'>" + po.NextPageText + "</a>"
}
if po.EnableFirstLastLink { //当首页,尾页都设定的时候,就显示
rs += "<a " + judgeDisable(po, totalpages, ) + " href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(totalpages) + "'>" + po.LastPageText + "</a>"
}
rs += "</div>"
return rs
} /**
* 设置默认值
*/
func setDefault(po *PageOptions, totalpages int) *PageOptions {
if len(po.FirstPageText) <= {
po.FirstPageText = "首页"
}
if len(po.LastPageText) <= {
po.LastPageText = "尾页"
}
if len(po.PrePageText) <= {
po.PrePageText = "上一页"
}
if len(po.NextPageText) <= {
po.NextPageText = "下一页"
}
if po.Currentpage >= totalpages {
po.Currentpage = totalpages
}
if po.Currentpage <= {
po.Currentpage =
}
if po.LinkItemCount == {
po.LinkItemCount =
}
if po.PageSize == {
po.PageSize =
}
if len(po.ParamName) <= {
po.ParamName = "pno"
}
return po
} /**
*判断首页尾页 上一页下一页是否能用
*/
func judgeDisable(po *PageOptions, totalpages int, h_f int) string {
var rs string = ""
//判断头部
if h_f == {
if po.Currentpage == {
rs = "disabled=\"disabled\" style='pointer-events:none;'"
}
} else {
if po.Currentpage == totalpages {
rs = "disabled=\"disabled\" style='pointer-events:none;'"
}
}
return rs
}

---支飞亚

简单的beego分页功能代码的更多相关文章

  1. 一个简单的php分页类代码(转载)

    入门级php分页类 原文地址:http://www.xfcodes.com/php/fenye/3608.htm 时间:2015-12-16 20:52:00来源:网络 php分页类. 复制代码代码如 ...

  2. java分页功能代码

    import java.util.ArrayList; import java.util.List; /** * * @author cheney * * @date Aug 31, 2012 */ ...

  3. Django【进阶】分页功能Pagination

    项目中,我们需要很多非业务逻辑的功能,例如分页功能,而且此类功能移植性很好,可以在不同的项目中使用,所以整理好这些功能会一定程度上提高开发效率,下面是分页功能代码,使用时,可单独放在utils目录 & ...

  4. hibernate和struts2实现分页功能

    1.DAO层接口的设计,定义一个PersonDAO接口,里面声明了两个方法: public interface PersonDAO { public List<Person> queryB ...

  5. 原生js实现分页功能

    原生就是实现分页功能 代码如下: var pagination = function(option,fun){ this.parentId = option.id; //容器 this.pageSiz ...

  6. 简单封装分页功能pageView.js

    分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复 ...

  7. 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

    问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...

  8. jsp、js分页功能的简单总结

    一.概述 首先,我们要明确为何需要分页技术,主要原因有以下: 1.分页可以提高客户体验度,适当地选择合适的数据条数,让页面显得更有条理,使得用户体验感良好,避免过多数据的冗余. 2.提高性能的需要.分 ...

  9. PHP分页初探 一个最简单的PHP分页代码实现

    PHP分页代码在各种程序开发中都是必须要用到的,在网站开发中更是必选的一项. 要想写出分页代码,首先你要理解SQL查询语句:select * from goods limit 2,7.PHP分页代码核 ...

随机推荐

  1. Java-MyBatis:MyBatis 3 入门

    ylbtech-Java-MyBatis:MyBatis 3 入门 1.返回顶部 1. 入门 安装 要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于 classpath ...

  2. CSS中alt和title属性的正确使用

    1.在<img>标签中的使用 alt:全称为alttext,实质是当图片无法正确显示时用于替换(在IE下同时起到了title的作用,即鼠标滑过时文字提示): title:鼠标经过时文字提示 ...

  3. python之--初始面向对象

    阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...

  4. Java入门第一季

    慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...

  5. React组件化开发

    环境搭建: 1.安装node.js 2.安装cnpm  # npm install -g cnpm --registry=https://registry.npm.taobao.org 3.全局安装c ...

  6. 关于getElementsByTagName的遍历顺序

    关于getElementsByTagName的遍历顺序是怎么样的呢? getElementsByTagName的遍历顺序是从HTML的页面从上到下遍历还是按照标签的嵌套顺序层层遍历的呢? 来做个小小的 ...

  7. MyBatis数据持久化(十一)Mybatis3、Spring4、Struts2整合开发

    上一节我们將Mybatis和Spring4进行整合,本节向大家介绍Mybatis在Web开发中的应用,并与主流的MVC框架Struts2进行整合. 我们首先需要获取Struts2框架,Struts2官 ...

  8. SQL Server死锁排查

    1. 死锁原理 根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态. 死锁的四个必要条件:互斥条件(Mutua ...

  9. 织梦Fatal error: Call to a member function GetInnerText()

    问题:织梦修改或者添加了自定义表单后在后台修改文章的时候出现如下错误:Fatal error: Call to a member function GetInnerText() on a non-ob ...

  10. ajax请求及遍历

    $(".btn").click(function(){ $.ajax({ type:"POST", url:"../../js/info.json&q ...