使用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
和更多功能)
我已将博客从 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()
.
对于 "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
和更多功能)