Please try again 与你 —— 修复 Wikidot 的 ListPages 翻页功能

Wikidot已修复了该问题,本文作废。

省流版

[[module ListPages ...... offset="@URL"]]
...
[[/module]]
[!--你只需要在原来的 ListPages 加上 {{offset="@URL"}} 这个属性就行了,你不需要动其他东西,上面这个只是用来举例的 --]

[[module ListPages 【category、order、tags 等调整页面顺序/筛选页面的属性与你原来的 ListPages 相同】limit="1" separate="false" wrapper="false" offset="@URL"]]
[/start/offset/[[#expr %%index%%-【你的 ListPages 每一页的页面数量减去1】]] 上一页] 第[[#expr (%%index%%-1)/【你的 ListPages 每一页的页面数量】+1]]页  [/start/offset/[[#expr %%index%%+【你的 ListPages 每一页的页面数量减去1】]] 下一页]
[[/module]]

代码解说

首先丢一个非常简单的 ListPages

[[module ListPages category="example" limit="*" separate="true" perPage="10"]]
%%title%%
[[/module]]

在这里简单变一个魔法
[[module ListPages category="example" limit="*" separate="true" perPage="10" {{offset="@URL"}}]]
%%title%%
[[/module]]

各位应该注意到 offset="@URL" 属性了吧(
其实这部分原理类似于迭代,将前面的页面用 offset 这个属性挤走指定数量之后,我们就能得到想要的翻页效果( ̄︶ ̄)

接下来,我们这个 ListPages 后面加上类似下面这么一段代码:

[[module ListPages category="example" tags="test" limit="1" separate="false" wrapper="false" {{offset="@URL"}}]]
[/start/offset/[[#expr %%index%%-9]] 上一页] 第[[#expr (%%index%%-1)/10+1]]页  [/start/offset/[[#expr %%index%%+9]] 下一页]
[[/module]]

用法大概就是这样子:

[[module ListPages 【category、order、tags 等调整页面顺序/选中页面的属性与上面的 ListPages 相同】limit="1" separate="false" wrapper="false" {{offset="@URL"}}]]
[/start/offset/[[#expr %%index%%-【你的 ListPages 每一页的页面数量减去1】]] 上一页] 第[[#expr (%%index%%-1)/【你的 ListPages 每一页的页面数量】+1]]页  [/start/offset/[[#expr %%index%%+【你的 ListPages 每一页的页面数量减去1】]] 下一页]
[[/module]]

什么Σ( ° △ °|||)︴你说你看不明白代码的原理吗(゜o゜; 那就让我们一段段分析吧(

首先是第一行:

[[module ListPages 【category、order、tags 等调整页面顺序/选中页面的属性与上面的 ListPages 相同】limit="1" separate="false" wrapper="false" {{offset="@URL"}}]]

category、order、tags 等调整页面顺序/选中页面的属性与上面的 ListPages 相同,是为了保持页面总数一致防止出现奇奇怪怪的问题导致翻不到最后几个页面。

limit="1",是保证显示的翻页按钮是挤掉前面那些我们不需要的页面后能够精准命中第一个项目,防止冒出一大堆顺序混乱的翻页按钮 (°ー°〃)

至于 separate="false"wrapper="false" …就当作者强迫症发作不想简单翻页按钮外面多两个用不上的div吧(

offset="@URL" 就不用说了,和前面给原来的 ListPage 加上这个小东西的原理一样,是为了保证能够挤掉前面的页面 ( ̄_, ̄ )

接下来,让我们把第二行拆成两个部分,先从翻页按钮说起:

[/start/offset/[[#expr %%index%%-【你的 ListPages 每一页的页面数量减去1】]] 上一页] 
[/start/offset/[[#expr %%index%%+【你的 ListPages 每一页的页面数量减去1】]] 下一页]

#expr 其实是 Wikidot 的数学计算功能,大概相当于 CSS 中的 calc() 函数,这段代码里,上一页和下一页分别在计算两个不同的算式:

从第一个页面到现在列出的第一个页面的总数 - 接下来要翻过的页面数量 - 1
从第一个页面到现在列出的第一个页面的总数 + 接下来要翻过的页面数量 - 1

为了减少代码复杂度,所以这里在代码中将 接下来要翻过的页面数量 - 1 直接定为你的 ListPages 每一页的页面数量减去1

没错,是从第一个页面到现在列出的第一个页面的总数加/减计算出来的,Wikidot 对 %%index%% 的定义其实是从列出的第一个页面依次往后数的数字,翻页功能需要以你的 ListPages 每一页的页面数量分段来挤走前面的页面,如果我们挤掉了第一到第十的页面,接下来这里的 %%index%% 输出的是第 11 个页面。

如果直接从当前列出的第一页页面加上你的 ListPages 每一页的页面数量,接下来就会遇到非常尴尬的问题——翻页的数量对不上了!所以这个 -1 就是为了防止发生上面这样尴尬的问题 ( ╹▽╹ )

再看看这里:

第[[#expr (%%index%%-1)/【你的 ListPages 每一页的页面数量】+1]]页

到了这里,各位是不是很容易就能理解这部分了()
先减去多出来的数字然后计算处理成页数,最后通过 +1 将从 0 开始数到从 1 开始数,将上面代码组合,我们就能得到一个有翻页的ListPages了:
[[module ListPages category="example" limit="*" separate="true" perPage="10" {{offset="@URL"}}]]
%%title%%
[[/module]]

[[module ListPages category="example" tags="test" limit="1" separate="false" wrapper="false" {{offset="@URL"}}]]
[/start/offset/[[#expr %%index%%-9]] 上一页] 第[[#expr (%%index%%-1)/10+1]]页  [/start/offset/[[#expr %%index%%+9]] 下一页]
[[/module]]

发布于:28 Jun 2025 19:10

评分: 0+x

评论区不支持 Markdown,格式见这里

新回复
登入为 Wikidot 用户
(将不会发布)
- +
Theme by SkipOS with CC BY-SA 3.0.
页面内容使用 CC BY-NC-SA 4.0 协议。