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

支持条件查询

支持参数保留

支持自定义css样式

支持表/视图

支持参数自定义 默认为pno

支持定义生成链接的个数

使用方式:

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

/*** 日志列表*/
func (this *LogController) List() {pno, _ := this.GetInt("pno") //获取当前请求页
    var tlog []m.Tb_logvar conditions string = " order by id desc" //定义日志查询条件,格式为 " and name='zhifeiya' and age=12 "var po pager.PageOptions                                                //定义一个分页对象po.TableName = "tb_log"                                                 //指定分页的表名po.EnableFirstLastLink = true                                           //是否显示首页尾页 默认falsepo.EnablePreNexLink = true                                              //是否显示上一页下一页 默认为falsepo.Conditions = conditions                                              // 传递分页条件 默认全表po.Currentpage = int(pno)                                               //传递当前页数,默认为1po.PageSize = 20                                                        //页面大小  默认为20//返回分页信息,//第一个:为返回的当前页面数据集合,ResultSet类型//第二个:生成的分页链接//第三个:返回总记录数//第四个:返回总页数rs, pagerhtml, totalItem, _ := pager.GetPagerLinks(&po, this.Ctx)rs.QueryRows(&tlog)      //把当前页面的数据序列化进一个切片内this.Data["list"] = tlog //把当前页面的数据传递到前台this.Data["pagerhtml"] = pagerhtmlthis.Data["totalItem"] = totalItemthis.Data["PageSize"] = po.PageSizethis.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    //页面大小,默认20LinkItemCount       int    //生成A标签的个数 默认10个Href                string //A标签的链接地址  ---------[不需要设置]ParamName           string //参数名称  默认是pnoFirstPageText       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 <= 1 {currentpage = 1}if pagesize == 0 {pagesize = 20}var rs orm.RawSetero := orm.NewOrm()var totalItem, totalpages int = 0, 0                                                          //总条数,总页数o.Raw("SELECT count(*) FROM " + tableName + "  where 1>0 " + conditions).QueryRow(&totalItem) //获取总条数if totalItem <= pagesize {totalpages = 1} else if totalItem > pagesize {temp := totalItem / pagesizeif (totalItem % pagesize) != 0 {temp = temp + 1}totalpages = temp}rs = o.Raw("select *  from  " + tableName + "  where id >0 " + conditions + " LIMIT " + con.Itoa((currentpage-1)*pagesize) + "," + con.Itoa(pagesize))return totalItem, totalpages, rs
}/*** 返回总记录条数,总页数,当前页面数据,分页html* 根据分页选项,生成分页连接 下面是一个实例:func (this *MainController) Test() {var po util.PageOptionspo.EnablePreNexLink = truepo.EnableFirstLastLink = truepo.LinkItemCount = 7po.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.RequestURIvar rs stringif strings.Contains(uri, "?") {arr := strings.Split(uri, "?")rs = arr[0] + "?" + po.ParamName + "time=" + con.Itoa(time.Now().Second())arr2 := strings.Split(arr[1], "&")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(1) + "'>" + con.Itoa(1) + "</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(1) + "'>" + con.Itoa(1) + "</a>"rs += "<a href=''>...</a>"for i := po.Currentpage - po.LinkItemCount/2 + 1; i <= po.Currentpage+po.LinkItemCount/2-1; 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 := 1; i <= po.LinkItemCount+1; i++ {if i == po.LinkItemCount {rs += "<a href=\"" + po.Href + "&" + po.ParamName + "=" + con.Itoa(i) + "\">...</a>"} else if i == po.LinkItemCount+1 {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 := 1; 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, 0) + " href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(1) + "'>" + po.FirstPageText + "</a>"}if po.EnablePreNexLink { // disabled=\"disabled\"var a int = po.Currentpage - 1if po.Currentpage == 1 {a = 1}rs += "<a " + judgeDisable(po, totalpages, 0) + " 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 + 1if po.Currentpage == totalpages {a = totalpages}rs += "<a " + judgeDisable(po, totalpages, 1) + "  href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(a) + "'>" + po.NextPageText + "</a>"}if po.EnableFirstLastLink { //当首页,尾页都设定的时候,就显示rs += "<a " + judgeDisable(po, totalpages, 1) + " 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) <= 0 {po.FirstPageText = "首页"}if len(po.LastPageText) <= 0 {po.LastPageText = "尾页"}if len(po.PrePageText) <= 0 {po.PrePageText = "上一页"}if len(po.NextPageText) <= 0 {po.NextPageText = "下一页"}if po.Currentpage >= totalpages {po.Currentpage = totalpages}if po.Currentpage <= 1 {po.Currentpage = 1}if po.LinkItemCount == 0 {po.LinkItemCount = 10}if po.PageSize == 0 {po.PageSize = 20}if len(po.ParamName) <= 0 {po.ParamName = "pno"}return po
}/***判断首页尾页  上一页下一页是否能用*/
func judgeDisable(po *PageOptions, totalpages int, h_f int) string {var rs string = ""//判断头部if h_f == 0 {if po.Currentpage == 1 {rs = "disabled=\"disabled\"  style='pointer-events:none;'"}} else {if po.Currentpage == totalpages {rs = "disabled=\"disabled\"  style='pointer-events:none;'"}}return rs
}

---支飞亚

转载于:https://www.cnblogs.com/yunkeji/p/3974438.html

简单的beego分页功能代码相关推荐

  1. php按数字分页类,PHP简单实现数字分页功能示例

    本文实例讲述了PHP简单实现数字分页功能.分享给大家供大家参考,具体如下: header ( 'Content-Type: text/html; charset=utf-8' ); //分页 $pag ...

  2. UDP实现简单的群聊功能代码示例

    以下是UDP实现群聊功能代码示例 在java中,通过两个特定类来实现UDP协议顶层数据报,分别是DatagramPacket和DatagramSocket,其中类DatagramPacket是一个数据 ...

  3. Java实现分页功能 代码很粗糙,都是根据自己所需去定义逻辑功能的。

    1.首先定义了一个PageUtil的类,看了网上的很多教程,貌似都有一个这样的类,自己也定义了一个.在代码编写过程中发现这个类其实也没有那么大的作用,但是不去定义这个类,感觉好像缺少什么似得.(请高手 ...

  4. java实现分页打印功能_Java简单高效实现分页功能

    今天想说的就是能够在我们操作数据库的时候更简单的更高效的实现,现成的crud接口直接调用,方便快捷,不用再写复杂的sql,带吗简单易懂,话不多说上方法 1.utils.java工具类中的方法 /** ...

  5. hibernate和struts2实现分页功能

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

  6. 使用hibernate和struts2实现分页功能

    想着每天能学个新东西,今天准备了这个hibernate+struts2实现页面的分页功能,在这里,首先要感谢 http://www.blogjava.net/rongxh7/archive/2008/ ...

  7. php分页函数代码,PHP分页函数代码分享

    //$count为总条目数,$page为当前页码,$page_size为每页显示条目数 function show_page($count,$page,$page_size) { $page_coun ...

  8. java代码实现分页_Java实现简单的分页功能

    本文实例为大家分享了java实现分页功能的具体代码,供大家参考,具体内容如下 不用根据改变sql的形式去查询; 直接查询所有的数据,根据页码自动显示数据; 分页对象 public class page ...

  9. python嵌入html_Python odoo中嵌入html简单的分页功能

    在odoo中,通过iframe嵌入 html,页面数据则通过controllers获取,使用jinja2模板传值渲染 html页面分页内容,这里写了判断逻辑 首页 {% if current_page ...

最新文章

  1. 2017年实时更新系统hosts文件(不能访问时才会更新)不要用于非法行为 只供内部测试...
  2. 敢不敢模拟超过 5 万的并发用户?
  3. boost::safe_numerics::safe_unsigned_range相关的测试程序
  4. Windows Containers 大冒险: 加速
  5. Codeforces Round #647 (Div. 2) - Thanks, Algo Muse!(AB)
  6. App Store 排名获取。
  7. Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的平台版本
  8. 程序员总结的:最没有学习效率的 5 种方法!你在用其中哪一种?
  9. 抱团股大跌,亏了谁的钱?
  10. 读jquery 权威指南[4]-Ajax
  11. 互联网搜索 解决问题的心法 找什么 哪里找 怎么找
  12. Python机器学习预测算法
  13. 安装Windows10操作系统
  14. PROTUES实例——stm32点灯
  15. 【Java】按要求编程输出2018年日历
  16. 系统学习Java语言的15个网站
  17. 前端|Ant Design介绍
  18. EMI、EMS和EMC
  19. 十三届智能车直立车程序
  20. 痞子衡嵌入式:MCUXpresso IDE下工程链接文件配置管理与自动生成机制

热门文章

  1. 最大子列和问题(JAVA)
  2. 利用专用文件夹隐藏文件 (tasks、fonts)
  3. linux centos7重启路由命令行,centos7 永久添加静态路由
  4. python卸载_删除系统 Python 引发的惨案
  5. 虚拟机安装rsync服务器配置,虚拟机安装rsync服务器配置
  6. 在python语言中不能作为变量名的是什么_4、 在 Python 中可以使用 if 作为变量名。 (1.0分)_学小易找答案...
  7. 一个server搭建多个tomcat的时候session混乱情况及解决
  8. spring整合web
  9. 2022年中国折叠屏手机市场洞察报告
  10. 2021年度抖音小红书美妆行业营销报告