手写一个beego分页组件

// LimitPage 分页组件
func LimitPage(CurreentPage, AllCount int, FilterArgs, url string) (string, int, int) {
    // CurreentPage 当前页
    // AllCount 总数据量
    // FilterArgs额外的url参数
    // url 分页按钮的url
	pageCount, _ := beego.GetConfig("Int", "pagecount", 10) //从配置文件获取每个分页的最大数据量
	showPage := 10  //分页按钮范围
    // 如果没有当前分页就会默认分页为第一页(传入数值需要处理在没有分页的时候会等于0)
	if AllCount < 1 {
		AllCount = 1
	}
    // 计算有多少分页整数
	allPage := AllCount / pageCount.(int)
   // 计算分页余数
	mod := math.Mod(float64(AllCount), float64(pageCount.(int)))
	if mod > 0 {
        如果有余再加一页
		allPage++
	}
    用来存放分页按钮的列表
	htmlList := []string{}
	pageHalf := (showPage - 1) / 2
	start := 0
	stop := 0
	var previous string
	var next string
	if allPage < showPage {
        // 如果总分页数小于展示的分页数那么分页按钮的结束为总分页数
		start = 1
		stop = allPage
	} else {
        // 如果当前页小于分页按钮的一半分页按钮的开始等于分页1结束等于总分页按钮
		if CurreentPage < pageHalf+1 {
			start = 1
			stop = showPage
		} else {
			if CurreentPage >= allPage-pageHalf {
				start = allPage - showPage
				stop = allPage
			} else {
				start = CurreentPage - pageHalf
				stop = CurreentPage + pageHalf
			}
		}
	}
	if CurreentPage <= 1 {
        // 如果当前页小于等于1那么上一页样式设置为不可用
		previous = "<li class='page-item disabled'><a href='#' class='page-link'>上一页</a></li>"
	} else {
		as := "<li class='page-item'><a href='%v?page=%v%v' class='page-link'  style='cursor:pointer;text-decoration:none;'>上一页<span aria-hidden='true'>&laquo;</span></a></li>"
		previous = fmt.Sprintf(as, url, CurreentPage-1, FilterArgs)
	}
	htmlList = append(htmlList, previous)
	for i := start; i <= stop; i++ {
		temp := ""
		if CurreentPage == i {
			temp = "<li class='page-item active'><a href='%v?page=%v%v' class='page-link' >%v</a></li>"
			temp = fmt.Sprintf(temp, url, i, FilterArgs, i)
		} else {
			temp = "<li class='page-item'><a href='%v?page=%v%v' class='page-link' >%v</a></li>"
			temp = fmt.Sprintf(temp, url, i, FilterArgs, i)
		}
		htmlList = append(htmlList, temp)
	}
	if CurreentPage >= allPage {
         // 如果当前页大于等于总页数那么下一页样式设置为不可用
		next = "<li class='page-item disabled'><a href='#' class='page-link'>下一页</a></li>"
	} else {
		as := "<li class='page-item'><a href='%v?page=%v%v' class='page-link' >下一页</a></li>"
		next = fmt.Sprintf(as, url, CurreentPage+1, FilterArgs)
	}
	htmlList = append(htmlList, next)
	data := strings.Join(htmlList, "")

	dataStart := 0
	dataStop := 0
    // dataStart 对应的是数据库的limit, dataStop对应的是数据库的offset
	dataStart = (CurreentPage - 1) * pageCount.(int)
	dataStop = pageCount.(int)
	return data, dataStart, dataStop
}

该模块我是在写beego项目的时候写的,可以用于其他的go web框架,只要小改下就好了。

转载于:https://my.oschina.net/u/3640109/blog/3029878

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值