分享
  1. 首页
  2. 文章

gf框架之分页模块(五) - 自定义分页

John · · 1140 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

文章来源:http://gf.johng.cn/597435

由于分页对象预定义的样式比较有限,有的时候我们想自定义分页的样式(标签输出),由于分页对象的的所有方法都是公开的,这便为开发者自定义分页样式提供了非常高的灵活度。开发者可以通过以下方式实现自定义分页内容:

  1. (推荐)对输出内容进行正则匹配替换实现自定义;
  2. 根据分页对象公开的方法自行组织分页内容实现自定义;
  3. 也可以自定义一个分页对象(继承于原有分页对象),使用方法重载的方式来实现自定义;

示例1,使用第一种方式实现分页自定义:

package main
import (
 "gitee.com/johng/gf/g"
 "gitee.com/johng/gf/g/os/gview"
 "gitee.com/johng/gf/g/util/gstr"
 "gitee.com/johng/gf/g/net/ghttp"
 "gitee.com/johng/gf/g/util/gpage"
)
// 分页标签使用li标签包裹
func wrapContent(page *gpage.Page) string {
 content := page.GetContent(4)
 content = gstr.ReplaceByMap(content, map[string]string {
 "<span" : "<li><span",
 "/span>" : "/span></li>",
 "<a" : "<li><a",
 "/a>" : "/a></li>",
 })
 return "<ul>" + content + "</ul>"
}
func main() {
 s := ghttp.GetServer()
 s.BindHandler("/page/custom2/*page", func(r *ghttp.Request){
 page := gpage.New(100, 10, r.Get("page"), r.URL.String(), r.Router.Uri)
 content := wrapContent(page)
 buffer, _ := gview.ParseContent(`
 <html>
 <head>
 <style>
 a,span {padding:8px; font-size:16px;}
 div{margin:5px 5px 20px 5px}
 </style>
 </head>
 <body>
 <div>{{.page}}</div>
 </body>
 </html>
 `, g.Map{
 "page" : gview.HTML(content),
 })
 r.Response.Write(buffer)
 })
 s.SetPort(10000)
 s.Run()
}

执行后,页面输出结果为:
91ab58599ed9f155043305724480bfb4_378x358.png

示例2,使用第二种方式实现分页自定义:

package main
import (
 "gitee.com/johng/gf/g/os/gview"
 "gitee.com/johng/gf/g/net/ghttp"
 "gitee.com/johng/gf/g/util/gpage"
)
// 自定义分页名称
func pageContent(page *gpage.Page) string {
 page.NextPageTag = "NextPage"
 page.PrevPageTag = "PrevPage"
 page.FirstPageTag = "HomePage"
 page.LastPageTag = "LastPage"
 pageStr := page.FirstPage()
 pageStr += page.PrevPage()
 pageStr += page.PageBar("current-page")
 pageStr += page.NextPage()
 pageStr += page.LastPage()
 return pageStr
}
func main() {
 s := ghttp.GetServer()
 s.BindHandler("/page/custom/*page", func(r *ghttp.Request) {
 page := gpage.New(100, 10, r.Get("page"), r.URL.String(), r.Router.Uri)
 buffer, _ := gview.ParseContent(`
 <html>
 <head>
 <style>
 a,span {padding:8px; font-size:16px;}
 div{margin:5px 5px 20px 5px}
 </style>
 </head>
 <body>
 <div>{{.page}}</div>
 </body>
 </html>
 `, g.Map{
 "page" : gview.HTML(pageContent(page)),
 })
 r.Response.Write(buffer)
 })
 s.SetPort(8199)
 s.Run()
}

执行后,页面输出结果为:
036961cfbe86a2c17d7f783b33829f98_581x112.png


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:John

查看原文:gf框架之分页模块(五) - 自定义分页

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1140 次点击 ∙ 1 赞
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏