使用Qgoda分页

Pagination with Qgoda

我已将博客从 Jekyll 迁移到 Qgoda,现在我想对列表页面进行分页,以便页面上只显示固定数量的帖子。我还想为类别、标签和年份(用于存档)创建这些列表。并且只应显示与列表页面语言相同的帖子。

如何创建附加页面?我需要为他们每个人准备一个降价文件吗?

如何创建指向这些页面的链接?

我知道这一定是可能的,因为我在演示文稿中看到过,但文档似乎没有解释。

分页尚未记录。试试这个:

[% USE q = Qgoda %]
[% posts = q.list('date.year'=2018 lingua=asset.lingua type='post').nsortBy('date').reverse() %]
[% start = asset.start || 0 %]
[% asset.start = 0 %]
[% p = q.paginate(start = start total = posts.size per_page = 10) %]
[%- FOREACH post IN posts.splice(p.start, p.per_page) -%]
  <a href="[% post.permalink %]">[% post.title | html %]</a><br />
[%- END -%]
<a href="[% p.previous_link %]">Newer</a>
<a href="[% p.next_link %]">Older</a>
[%- IF p.next_start -%]
  [% q.clone(location = p.next_location start = p.next_start) %]
[%- END -%]
[% USE Dumper %]<pre>[% Dumper.dump(p) %]</pre>

在第 2 行中,您将所需的过滤器组合传递给模板方法 q.list()。在这种情况下,您将获得 2018 年的资产,这些资产与列表本身具有相同的语言并且类型为 "post"。您总是必须对它们进行排序(在本例中是按日期排序),并可能将它们反转以首先列出最新的帖子。

方法q.paginate()是辅助方法。它的命名参数是起始页的 start 和集合中文档总数的 total 。结果是包含您需要的所有预计算值的哈希。

FOREACH 循环中,您迭代 posts 但使用标准模板工具包 vmethod splice().

删除了所需的 window

对于 "newer" 和 "older" 链接的目标,您使用上面 q.paginate() 生成的预计算值。

最后,如果还有更多页面 (p.next_start),您可以使用 q.clone() 克隆当前页面。该方法创建当前文档的精确副本,但会覆盖您作为参数传递的那些属性。您总是必须覆盖克隆的 location,这里还有 start 页面,它将是 10, 20, 30, ...

最后一行吐出q.paginate()Dumper.dump()的完整结果。这只是为了调试,以便您可以看到预先计算了哪些其他值。

您可以简化收集文件的方式:

[% posts = q.list('date.year'=2018 lingua=asset.lingua type='post') %]
[% posts = q.llist('date.year'=2018 type='post') %]
[% posts = q.llistPosts('date.year'=2018) %]

这三个调用产生完全相同的结果,但冗长程度有所降低。

您可以在 https://github.com/gflohr/qgoda-multilang/blob/master/_views/components/listing.html or https://github.com/gflohr/qgoda-site/blob/master/_views/components/listing.html.

找到真实示例(具有必要的 IF 和更多功能)