Отображение виджета разбивки на страницы в Go

#go #web #go-html-template #go-http

#Вперед #веб #go-html-шаблон #go-http

Вопрос:

Я использую HTML-шаблоны в Go для отображения виджета разбивки на страницы. Я пытаюсь следовать примеру того, как это сделать отсюда:https://www.solodev.com/blog/web-design/adding-pagination-to-your-website.stml

Пока это мой код:

 // Item size like call 2 item from database
var pagesize = 2
var PaginationSize int = 6
var isActive string
Pagination := make([]int, PaginationSize)

for i := 0; i < PaginationSize; i   {
    if RequestPageNumber <= page {
        Pagination[i] = i   1
    } else {
        Pagination[i] = RequestPageNumber   i
    }

    if i == 0 {
        isActive = " active"
    } else {
        isActive = ""
    }
    Info.Pagination  = template.HTML(
        fmt.Sprintf(`<li class="page-item%s"><a class="page-link" href=?id=%v>%v</a></li>`,
            isActive, RequestPageNumber i, RequestPageNumber i))
}
  

Я хотел бы улучшить это, сделав обновление списка разбивки на страницы только тогда, когда активная страница становится кратной PaginationSize . Например, когда отображаемая разбивка на страницы показывает

 (1), 2, 3, 4, 5, 6
  

Если пользователь нажимает на 2, я хотел бы видеть

 1, (2), 3, 4, 5, 6
  

Но мой текущий код отображает

 (2), 3, 4, 5, 6, 7
  

После того, как страница продвинулась за 6, список страниц должен выглядеть следующим образом

 7, 8, 9, 10, 11, 12 ,13 ,14
  

Данные, отображаемые в этом представлении разбивки на страницы, могут находиться в базе данных, поэтому я также был бы признателен за советы о том, как заставить это работать с базой данных, если это возможно.

Спасибо.

Ответ №1:

Проверьте следующее решение

 package main

import (
    "fmt"
)

const PSIZE = 5

func pager(pageNo int) {
    var start int = pageNo/(PSIZE-1)*(PSIZE-1)   1
    if pageNo%(PSIZE-1) == 0 {
        start -= PSIZE - 1
    }

    for i := start; i < start PSIZE; i   {
        if i == pageNo {
            fmt.Printf("(%d) ", i)
        } else {
            fmt.Printf("%d ", i)
        }
    }
    fmt.Print("n")
}

func main() {
    pager(4)
    pager(8)
    pager(9)
}
  

Вывод

 1 2 3 (4) 5 
5 6 7 (8) 9 
(9) 10 11 12 13 
  

https://play.golang.org/p/rFslGe2OE0k