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

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

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

    1. package main
    2. import (
    3. "gitee.com/johng/gf/g"
    4. "gitee.com/johng/gf/g/os/gview"
    5. "gitee.com/johng/gf/g/util/gstr"
    6. "gitee.com/johng/gf/g/net/ghttp"
    7. "gitee.com/johng/gf/g/util/gpage"
    8. )
    9. // 分页标签使用li标签包裹
    10. func wrapContent(page *gpage.Page) string {
    11. content := page.GetContent(4)
    12. content = gstr.ReplaceByMap(content, map[string]string {
    13. "<span" : "<li><span",
    14. "/span>" : "/span></li>",
    15. "<a" : "<li><a",
    16. "/a>" : "/a></li>",
    17. })
    18. return "<ul>" + content + "</ul>"
    19. }
    20. func main() {
    21. s := ghttp.GetServer()
    22. s.BindHandler("/page/custom2/*page", func(r *ghttp.Request){
    23. page := gpage.New(100, 10, r.Get("page"), r.URL.String(), r.Router)
    24. content := wrapContent(page)
    25. buffer, _ := gview.ParseContent(`
    26. <html>
    27. <head>
    28. <style>
    29. a,span {padding:8px; font-size:16px;}
    30. div{margin:5px 5px 20px 5px}
    31. </style>
    32. </head>
    33. <body>
    34. <div>{{.page}}</div>
    35. </body>
    36. </html>
    37. `, g.Map{
    38. "page" : gview.HTML(content),
    39. })
    40. r.Response.Write(buffer)
    41. })
    42. s.SetPort(10000)
    43. s.Run()
    44. }

    执行后,页面输出结果为:
    自定义分页 - 图1

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

    1. package main
    2. import (
    3. "gitee.com/johng/gf/g/os/gview"
    4. "gitee.com/johng/gf/g/net/ghttp"
    5. "gitee.com/johng/gf/g/util/gpage"
    6. )
    7. // 自定义分页名称
    8. func pageContent(page *gpage.Page) string {
    9. page.NextPageTag = "NextPage"
    10. page.PrevPageTag = "PrevPage"
    11. page.FirstPageTag = "HomePage"
    12. page.LastPageTag = "LastPage"
    13. pageStr := page.FirstPage()
    14. pageStr += page.PrevPage()
    15. pageStr += page.PageBar("current-page")
    16. pageStr += page.NextPage()
    17. pageStr += page.LastPage()
    18. return pageStr
    19. }
    20. func main() {
    21. s := ghttp.GetServer()
    22. s.BindHandler("/page/custom/*page", func(r *ghttp.Request) {
    23. page := gpage.New(100, 10, r.Get("page"), r.URL.String(), r.Router.Uri)
    24. buffer, _ := gview.ParseContent(`
    25. <html>
    26. <head>
    27. <style>
    28. a,span {padding:8px; font-size:16px;}
    29. div{margin:5px 5px 20px 5px}
    30. </style>
    31. </head>
    32. <body>
    33. <div>{{.page}}</div>
    34. </body>
    35. </html>
    36. `, g.Map{
    37. "page" : gview.HTML(pageContent(page)),
    38. })
    39. r.Response.Write(buffer)
    40. })
    41. s.SetPort(8199)
    42. s.Run()
    43. }

    执行后,页面输出结果为:
    自定义分页 - 图2