/paginator

Paginator 是一个Golang分页工具

Primary LanguageGoApache License 2.0Apache-2.0

Paginator Build Status

Paginator是一个Golang分页工具,参考了原作者的项目结构,重新编写了项目核心分页处理逻辑,新增获取页码 URL 和生成 HTML 代码功能。

安装

go get github.com/finejian/paginator

开始使用

获取分页页码:

package main

import "github.com/finejian/paginator"

func main() {
	// 参数:传入数据总行数
	p := paginator.New(43)
	
	// 将 p 当作 template 对象 命名为 page 传到 "simple.html"
	// ...

	// 如果使用的是 gin 可以参考代码:
	router := gin.Default()
	router.LoadHTMLFiles("simple.html", "simple.html")
	router.GET("/simple", func(c *gin.Context) {
		p := paginator.New(43)

		c.HTML(http.StatusOK, "simple.html", gin.H{
			"page": p,
		})
	})
	router.Run(":8080")
}

simple.html

{{if not .page.IsFirst}}[First](1){{end}}
{{if .page.HasPrevious}}[Previous]({{.page.Previous}}){{end}}

{{range .page.Pages}}
	{{if eq .Num -1}}
	...
	{{else}}
	{{.Num}}{{if .IsCurrent}}(current){{end}}
	{{end}}
{{end}}

{{if .page.HasNext}}[Next]({{.page.Next}}){{end}}
{{if not .page.IsLast}}[Last]({{.page.TotalPages}}){{end}}

输出结果:

[First](1) [Previous](2) ... 2 3(current) 4 ... [Next](4) [Last](5)

如果你在 html 代码中直接获取到相应页码的 url,必须在初始话 paginator 时候调用 Request 方法

// 调用 Request 方法传入 http request 对象:
// c 为 网络请求的 Context 上下文对象
p := paginator.New(43).Request(c.Request)

在确保调用 Request 方法传入正确内容的情况下,可在 html 代码中得到如下使用 paginator 会获取 request 请求的 query 参数,并会在每个页面 url 中还原这些 query 请求参数

{{if not .page.IsFirst}}<a href="{{.page.FristURL}}">首页</a>{{end}}
{{if .page.HasPrevious}}<a href="{{.page.PreviousURL}}">上一页</a>{{end}}

{{range .page.PageURLs}}
	{{if eq .Num -1}}
	...
	{{else}}
	<a href="{{.Path}}">{{.Num}}{{if .IsCurrent}}(current){{end}}</a>
	{{end}}
{{end}}

{{if .page.HasNext}}<a href="{{.page.NextURL}}">下一页</a>{{end}}
{{if not .page.IsLast}}<a href="{{.page.LastURL}}">尾页</a>{{end}}

也可以在 html 代码中直接使用如下方法,一次获取整段分页功能 html 代码

{{.page.PageTemp}}

获取帮助

License

This project is under Apache v2 License. See the LICENSE file for the full license text.