Hugo框架中文文档 Pagination 分页模板
Contents
HUgo提供的分页机制在与where 函数以及函数中类似SQL的操作符: first, last, 和 after 结合使用时, Hugo的真正强大力量会熠熠生辉发出耀眼光芒:)。 同时也可以按您习惯的HUgo方式对内容排序.
配置分页
分页可以在站点配置文件中配置。
Paginate- default =
10默认值, 设置以后可以在模板内重载这个值. PaginatePath- 分页路径 默认值 =
page允许您设置分页页面的不同路径.
设置Paginate为正数会将主页、区块和分类页面分成包含设置的数值大小的页面块。但是请注意,为区块页、分类标签页和主页的分页页面的生成是lazy懒加载的–页面不会被创建如果没有被 .Paginator (见下面说明)引用.
PaginatePath用于在页面分页器中定制URL(默认设置生成的URL形如 /page/1/)
展示分页页面列表
有两种配置和使用.Paginator的方式:
- 最简单的方式是在模板中调用
.Paginator.Pages, 这里面包含 那个页面 所属的页面. - 使用可用的模板函数和排序选项选择另外的页面集合, 然后传递选择的slice给
.Paginate使用. 比如.
{{ range (.Paginate ( first 50 .Pages.ByTitle )).Pages }}或者{{ range (.Paginate .RegularPagesRecursive).Pages }}.
对于指定的 Page, 它是上面两种方式之一. .Paginator是静态的、一经创建无法改变.
如果在同一页面调用.Paginator or .Paginate多次, 必须保证所有的调用是相同的. 在生成页面时一旦调用.Paginator 或者 .Paginate, 结果会被缓存, 任何后续的相似调用会重用缓存结果. 这意味着任何不与第一个调用匹配的后续调用不会得到想要的结果.
(谨记函数参数会提前评估,所以类似$paginator := cond x .Paginator (.Paginate .RegularPagesRecursive)这样的调用是您不应该使用的例子. 应该使用if/else来保证仅仅调用一次评估.
全局页面分页数值设定 (Paginate) 可以被提供的最后一个正数参数重载. 下面的例子会生成每个页面五个条目:
{{ range (.Paginator 5).Pages }}{{ $paginator := .Paginate (where .Pages "Type" "posts") 5 }}
也可以将GroupBy函数与分页结合使用:
| |
构建分页导航
.Paginator包含构建分页界面的足够信息.
最简单的方式是在您页面内包含hugo内置的模板(Bootstrap兼容的模式):
| |
下面例子展示了如何在使用前创建.Paginator:
| |
如果没有where 过滤, 上面例子更简单:
| |
如果想构建定制的分页导航, 您可以使用 .Paginator对象来达成,.Paginator对象包含下面的属性:
PageNumber- 当前页在页面序列中的数值
URL- 当前页的相对URL
Pages- 分页器所管理的页面
NumberOfElements- 当前页的元素数量
HasPrev- 当前页是否有前一页
Prev- 当前页的前一页
HasNext- 当前页是否具有下一页
Next- 当前页的下一页
First- 分页的第一页
Last- 分页的最后一页
Pagers- 分页的list用来构建分页的菜单
PageSize- 每页的元素数量
TotalPages- 分页器中所有页数量
TotalNumberOfElements- 分页器中所有页上的元素数目
补充信息
所有分页器的页面构建形式如下(BLANK意味着没有值):
| |