#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