首先,创建一个新的HTML模板文件,例如custom_pagination.html,用于渲染分页页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Custom Pagination Example</title>
</head>
<body>
<div>
{{range .PageData}}
<p>{{.}}</p>
{{end}}
</div>
<div>
<span>Page: {{.Page}}</span>
<span>Total Pages: {{.TotalPages}}</span>
</div>
</body>
</html>
然后,更新GoFrame的路由处理函数:
package main
import (
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
"github.com/gogf/gf/util/gconv"
)
type PageData struct {
Page int
TotalPages int
Data []string
}
func main() {
s := g.Server()
// 模拟数据库数据
dataList := make([]string, 100)
for i := 0; i < 100; i++ {
dataList[i] = "Data" + gconv.String(i+1)
}
// 每页显示的数据数量
pageSize := 10
// 设置路由
s.BindHandler("/custom_page/{page}", func(r *ghttp.Request) {
page, err := r.GetInt("page")
if err != nil || page <= 0 {
page = 1
}
// 计算总页数
totalPages := (len(dataList) + pageSize - 1) / pageSize
// 计算分页数据范围
start := (page - 1) * pageSize
end := page * pageSize
if end > len(dataList) {
end = len(dataList)
}
// 获取当前页的数据
pageData := dataList[start:end]
// 渲染页面
r.View("custom_pagination.html", PageData{
Page: page,
TotalPages: totalPages,
Data: pageData,
})
})
// 启动服务器
s.Run()
}
在这个例子中,我们通过计算总页数(totalPages)来支持自定义分页,而不是简单地使用当前数据总数除以每页的数量。然后,我们在HTML模板中显示当前页码和总页数。
自定义分页的实现方式会依赖于具体的业务需求,你可以根据实际情况对分页逻辑进行更复杂的定制。以上示例只是一个简单的起点,你可以根据需要进行扩展和优化。
转载请注明出处:http://www.zyzy.cn/article/detail/7857/GoFrame