在 Go 中显示分页小部件
Displaying a pagination widget in Go
我在 Go 中使用 HTML 模板来呈现分页小部件。我正在尝试从这里开始学习如何做的例子: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
包装在这个分页视图中的数据可能在数据库中,所以如果可能的话,我也希望获得有关如何使它与数据库一起工作的提示。
谢谢。
检查下一个解决方案
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
我在 Go 中使用 HTML 模板来呈现分页小部件。我正在尝试从这里开始学习如何做的例子: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
包装在这个分页视图中的数据可能在数据库中,所以如果可能的话,我也希望获得有关如何使它与数据库一起工作的提示。
谢谢。
检查下一个解决方案
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