一,代码
1,模块
package pageimport "fmt"type Page struct {//定义分页的structTotal int `json:"total"`TotalPage int `json:"totalpage"`CurrentPage int `json:"currentpage"`PrevPage int `json:"prevpage"`NextPage int `json:"nextpage"`ListPage []int `json:"listpage"`
}func GetPageInfo(total,size,currentPage int) *Page {//创建对象pageOne := &Page{}//items总数pageOne.Total = total//当前页pageOne.CurrentPage = currentPage//总页数if size == 0 {pageOne.TotalPage = 0}totalPage := total / sizeif total%size > 0 {totalPage++}pageOne.TotalPage = totalPagefmt.Println("TotalPage:",totalPage)//得到要列出的页码,begin:=1end:=1if totalPage<=10 {begin = 1end = totalPage} else {if currentPage-5<=0 {begin = 1end = 10} else {if totalPage-currentPage<=5 {end = totalPagebegin = totalPage-9} else {begin = currentPage-5end = begin+9}}}fmt.Println("end:",end)//添加到切片listOne := []int{}for i := begin; i <= end; i++ {fmt.Println(i)listOne = append(listOne,i)}fmt.Println(listOne)pageOne.ListPage = listOne//得到之前一页和之后一页next:=currentPage+1if next > totalPage {next = totalPage}prev:=currentPage-1if prev < 1 {prev = 1}pageOne.PrevPage = prevpageOne.NextPage = nextreturn pageOne
}
2,控制器
package controllerimport ("fmt""github.com/gofiber/fiber/v2""industry/service""strconv"
)type TestController struct{}func NewTestController() *TestController {return &TestController{}
}func (dc *TestController) Test(c *fiber.Ctx) error {p := c.Query("p", "1")bid := 2cid := 0size:=20page, _ := strconv.Atoi(p)pageOne := service.GetPageInfo(bid,cid,size,page)myMap:=fiber.Map{}myMap["Title"] = "书店新上图书列表"myMap["page"] = pageOnemyMap["base"] = "/test/test?"fmt.Println(myMap)return c.Render("test/test", myMap)
}
二,模板:
定义模板
<div class="page" style="margin-top: 30px;">{{$page := .page}}{{$base := .base}}<ul class="pagination"><li><span class="rows">共 {{.page.Total}} 条记录</span></li>{{if ne 1 $page.CurrentPage}}<li><a class="next" href="{{$base}}&p={{.page.PrevPage}}"> << </a></li>{{end}}{{range $key, $value := .page.ListPage}}{{if eq $value $page.CurrentPage}}<li class="active"><span class="current">{{$value}}</span></li>{{else}}<li><a class="num" href="{{$base}}&p={{$value}}">{{$value}}</a></li>{{end}}{{end}}{{if ne $page.TotalPage $page.CurrentPage}}<li><a class="next" href="{{$base}}&p={{.page.NextPage}}">>></a></li>{{end}}<li><a class="end" href="{{$base}}&p={{.page.TotalPage}}">...{{.page.TotalPage}}</a></li></ul>
</div>
调用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><meta name="renderer" content="webkit" /><title>新闻资讯 - 官方网站!</title><link rel="shortcut icon" type="image/x-icon" href="/favicon.png" media="screen" /><link type="text/css" rel="stylesheet" href="/Font/css/font-awesome.min.css" /><link type="text/css" rel="stylesheet" href="/Animate/animate.css" /></head>
<body>{{template "partials/page" .}}</body>
</html>