首页 > 其他分享 >gofiber: 模板: 分页功能模块

gofiber: 模板: 分页功能模块

时间:2024-11-23 09:35:59浏览次数:7  
标签:totalPage pageOne int TotalPage 功能模块 gofiber myMap page 模板

一,代码

1,模块

package page

import "fmt"


type Page struct {
	//定义分页的struct
	Total 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 / size
	if total%size > 0 {
		totalPage++
	}
	pageOne.TotalPage = totalPage
	fmt.Println("TotalPage:",totalPage)
    //得到要列出的页码,
    begin:=1
    end:=1
    if totalPage<=10 {
    	begin = 1
    	end = totalPage
	} else {
		if currentPage-5<=0 {
			begin = 1
			end = 10
		} else {
			if totalPage-currentPage<=5 {
				end = totalPage
				begin = totalPage-9
			} else {
				begin = currentPage-5
				end = 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+1
	if next > totalPage {
		next = totalPage
	}

	prev:=currentPage-1
	if prev < 1 {
		prev = 1
	}

	pageOne.PrevPage = prev
	pageOne.NextPage = next

	return pageOne
}

2,控制器

package controller

import (
	"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 := 2
	cid := 0
    size:=20

	page, _ := strconv.Atoi(p)

	pageOne := service.GetPageInfo(bid,cid,size,page)

	myMap:=fiber.Map{}
	myMap["Title"] = "书店新上图书列表"
	myMap["page"] = pageOne
	myMap["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>

三,测试效果

标签:totalPage,pageOne,int,TotalPage,功能模块,gofiber,myMap,page,模板
From: https://www.cnblogs.com/architectforest/p/18556340

相关文章

  • 基于STL的自定义栈与队列实现:灵活选择底层容器的模板设计
    文章目录代码模板设计主要成员函数底层容器的选择模板设计底层容器的选择关于stack的示例代码关于queue的示例代码前言:在本文中,我们将分析一个模拟C++标准模板库(STL)栈的自定义实现以及模仿C++标准模板库(STL)队列的自定义实现。该stack类模板允许在底层容器的选择......
  • 浅拷贝与深拷贝 以及嵌套和递归使用模板类
     1.浅拷贝和深拷贝——对象和类浅拷贝浅拷贝只复制对象的基本属性,而不复制引用类型的属性指向的对象,即只复制引用而不复制引用指向的对象在浅拷贝中,新对象与原始对象共享引用类型的属性指向的对象,即它们指向同一个对象。编译器提供的拷贝构造函数是浅拷贝,当一个对象修......
  • node根据模板生成pdf,并在pdf中插入文本信息,水印,签章。
    要求通过node生成司机小程序需要的pdf,并在pdf插入信息,用户签章,公司签章,水印等。第三方插件#pdf-lib版本1.17.1。读取pdf模板,插入信息,签章,水印。#@pdf-lib/fontkit版本1.1.1。加载pdf插入信息时所需的字体文件ttf。#canvas版本2.11.2。根据用户名形成用户签章(文字......
  • acwing第三章算法模板
    29、树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b,b->a。因此我们可以只考虑有向图的存储。(1)邻接矩阵:g[a][b]存储边a->b(2)邻接表://对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int......
  • LangGraph 源码分析 | BaseTool 模板类
    文章目录BaseTool源码分析核心属性以`TavilySearchResults(BaseTool)`为例namedescriptionargs_schemaresponse_format查询选项属性需要子类实现的抽象方法以`TavilySearchResults(BaseTool)`为例核心方法`arun()`:`run()`的异步执行版本`invoke()`和`ainvoke()`......
  • 【Golang】Go语言Web开发之模板渲染
    ✨✨欢迎大家来到景天科技苑✨✨......
  • 网站模板修改文件?网站模板怎样修改?
    网站模板修改文件修改网站模板文件通常涉及以下几个步骤,具体操作可能会因不同的建站平台或CMS(内容管理系统)而有所不同。以下是通用的步骤:1.登录后台管理访问后台:打开浏览器,输入您网站的后台管理地址,通常是类似于 https://yourwebsite.com/admin 的URL。登录:使用您的用户名......
  • 【朝花夕拾】免费个人网页搭建:免费托管、CDN加速、个人域名、现代化网页模板一网打尽
    现代化网页设计的免费宝藏:GitHubPages+CodePen+Cloudflare+US.KG前言在当今数字化时代,个人和企业越来越重视在线形象的建立。GitHubPages提供了一个免费且便捷的平台,允许用户托管静态网站。然而,GitHubPages默认的域名可能不够个性化,因此,许多用户希望将自定义域名绑定......
  • 网站后台的用户名修改?dw怎样修改网站模板?
    修改网站后台的用户名登录后台管理系统:打开浏览器,输入后台管理系统的地址。使用当前的用户名和密码登录。进入用户管理页面:导航到“用户管理”或“账户设置”等相关选项。选择要修改的用户:在用户列表中找到需要修改的用户名。编辑用户信息:点击“编辑”或......
  • dedecms网站模板内容修改?
    Dedecms(织梦内容管理系统)是一款非常流行的开源内容管理系统,用于构建网站。如果你需要修改Dedecms网站的模板内容,可以按照以下步骤操作:登录后台管理:打开你的Dedecms网站后台管理页面,通常地址为 http://你的域名/dede。输入用户名和密码登录。进入模板管理:登录后,在左侧......