简单的beego分页功能代码
生活随笔
收集整理的這篇文章主要介紹了
简单的beego分页功能代码
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一個簡單的beego分頁小插件(源代碼在最下面):
支持條件查詢
支持參數(shù)保留
支持自定義css樣式
支持表/視圖
支持參數(shù)自定義 默認(rèn)為pno
支持定義生成鏈接的個數(shù)
使用方式:
1)action中,引入包,然后如下使用:
/*** 日志列表*/ func (this *LogController) List() {pno, _ := this.GetInt("pno") //獲取當(dāng)前請求頁 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 //是否顯示首頁尾頁 默認(rèn)falsepo.EnablePreNexLink = true //是否顯示上一頁下一頁 默認(rèn)為falsepo.Conditions = conditions // 傳遞分頁條件 默認(rèn)全表po.Currentpage = int(pno) //傳遞當(dāng)前頁數(shù),默認(rèn)為1po.PageSize = 20 //頁面大小 默認(rèn)為20//返回分頁信息,//第一個:為返回的當(dāng)前頁面數(shù)據(jù)集合,ResultSet類型//第二個:生成的分頁鏈接//第三個:返回總記錄數(shù)//第四個:返回總頁數(shù)rs, pagerhtml, totalItem, _ := pager.GetPagerLinks(&po, this.Ctx)rs.QueryRows(&tlog) //把當(dāng)前頁面的數(shù)據(jù)序列化進(jìn)一個切片內(nèi)this.Data["list"] = tlog //把當(dāng)前頁面的數(shù)據(jù)傳遞到前臺this.Data["pagerhtml"] = pagerhtmlthis.Data["totalItem"] = totalItemthis.Data["PageSize"] = po.PageSizethis.TplNames = "cms/log/list.html" }2)視圖代碼:
class="default" 是分頁樣式,可根據(jù)實際情況設(shè)置 <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 //當(dāng)前頁 ,默認(rèn)1 每次分頁,必須在前臺設(shè)置新的頁數(shù),不設(shè)置始終默認(rèn)1.在控制器中使用方式:cp, _ := this.GetInt("pno") po.Currentpage = int(cp)PageSize int //頁面大小,默認(rèn)20LinkItemCount int //生成A標(biāo)簽的個數(shù) 默認(rèn)10個Href string //A標(biāo)簽的鏈接地址 ---------[不需要設(shè)置]ParamName string //參數(shù)名稱 默認(rèn)是pnoFirstPageText string //首頁文字 默認(rèn)"首頁"LastPageText string //尾頁文字 默認(rèn)"尾頁"PrePageText string //上一頁文字 默認(rèn)"上一頁"NextPageText string //下一頁文字 默認(rèn)"下一頁"EnableFirstLastLink bool //是否啟用首尾連接 默認(rèn)false 建議開啟EnablePreNexLink bool //是否啟用上一頁,下一頁連接 默認(rèn)false 建議開啟 }/*** 分頁函數(shù),適用任何表* 返回 總記錄條數(shù),總頁數(shù),以及當(dāng)前請求的數(shù)據(jù)RawSeter,調(diào)用中需要"rs.QueryRows(&tblog)"就行了 --tblog是一個Tb_log對象* 參數(shù):表名,當(dāng)前頁數(shù),頁面大小,條件(查詢條件,格式為 " 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 //總條數(shù),總頁數(shù)o.Raw("SELECT count(*) FROM " + tableName + " where 1>0 " + conditions).QueryRow(&totalItem) //獲取總條數(shù)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 }/*** 返回總記錄條數(shù),總頁數(shù),當(dāng)前頁面數(shù)據(jù),分頁html* 根據(jù)分頁選項,生成分頁連接 下面是一個實例: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,目的是保存參數(shù)*/ 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 { //當(dāng)首頁,尾頁都設(shè)定的時候,就顯示 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 { //當(dāng)首頁,尾頁都設(shè)定的時候,就顯示rs += "<a " + judgeDisable(po, totalpages, 1) + " href='" + po.Href + "&" + po.ParamName + "=" + con.Itoa(totalpages) + "'>" + po.LastPageText + "</a>"}rs += "</div>"return rs }/*** 設(shè)置默認(rèn)值*/ 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 }?
---支飛亞
轉(zhuǎn)載于:https://www.cnblogs.com/yunkeji/p/3974438.html
總結(jié)
以上是生活随笔為你收集整理的简单的beego分页功能代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 3685
- 下一篇: 测试 System.SysUtils.T