迭代指导
评分: +2+x

迭代测试 (状态:主体部分测试完毕)
>不要管这个页面。还在施工。
>显然ListPages崩了。再说。
>重新搞一遍。赣。
>修好了!()1


序言
长期以来,迭代因过分困难而又繁琐而“名声”远扬,它总被认为是只有代码大佬才会想想的事之一。许多作者很想给他们的文章用点小妙招,但多半都被又长又容易搞错的程序吓跑。网站上许多知名的文章都用了迭代,并有着极高的Upvote数。2其他的一些文章也使用迭代做魔杖释放它们的代码魔力。看到这些壮举,你很容易就觉得自己永远也搞不会这种东西了——然而,这篇指导准备改变这一点。3
何为迭代?
迭代是一种不失去评分和评论而在一个页面里展现不同页面的内容的方法。4这一特点使它对于新发现后的文章版本变化或CSS转换等故事元素非常有用。点这里来看看迭代是咋运作的!
我们知道,ListPages模块可以用于列出页面的标题、链接和内容等等。迭代的本质就是一个列出页面内容、且列表长度为1的ListPages模块,该模块的列表顺序由链接控制,因此可以做到改变页面链接(加上/offset/数字)、显示的页面内容随之改变的效果。段落页其实完全没有特殊的特性,也并非“构建在Wikidot之上的功能”,它们需要使用fragment分类、加上段落标签、设置父页面都只是出于两个目的:令网站管理方便、令ListPages模块抓取方便。段落页用于放置内容的段落,在迭代的情况下,一个迭代对应建立一个段落页。5
如何迭代?
好吧,现在你已经知道迭代如何运作了,我们也定义了一些新词汇,于是现在是时候把它们放进你的页面里了。我要从哪开始呢?首先你要做的就是创建一个“父页面”。读者在阅读你的整个文章时都将停留在父页面之上。它是给段落页表演的舞台。最好的说明方式是把它比喻成一个盘子。假设父页面是一个空空如也的盘子——就其本身而言空无一物——而你需要往上面放一些食物,也就是段落页。食物不能单独出现,它们得被盛在一些东西上——段落页也如此。而这时候就到了父页面,或者说盘子上场的时候了。它们单独出现时毫无用处,而当它们被组合在一起,你就有了一顿大餐/一篇文章。6

所有你需要为了创建你的父页面去做的就是创建一个标准的页面。举个例子,你现在正处于http://truthneverends.wikidot.com/dd这个页面上。而如果你在沙盒站里的话——那儿有个Wikidot的bug,你需要给页面名前加上“collab:”才能让它管用。举同一个例子,沙盒站里的这篇文的链接得是http://trutheverywhere.wikidot.com/collab:dd-1。对,这同时也代表着其他人也可以编辑父页面了,但这是严重的违规行为。请把你遇到的未经许可的编辑报告给职员,涉事者将被相应处理。7

现在你已经创建了你的页面,随后你就要让它准备好迎接迭代。记住,页面的所有实际内容都不应出现在父页面上,而是在段落页中,随后将会讲到这些。为了格式化你的父页面,请遵循下方的模版:

(版式)
 
[[module css]]
(所有贯穿整个文章的CSS代码)
[[/module css]]
 
[[>]]
[[module rate]]
[[/>]]
 
[[module ListPages  category="fragment" parent="." limit="1" order="created_at" offset="@URL|0"]]
%%content%%
[[/module]]
 
------
[[>]]
[[collapsible show="著作信息" hide="隐藏著作信息"]]
[[*user (你的Wikidot用户名)]]
 
(图片图源)
 
[[/collapsible]]
[[/>]]

让我们给这个模版说道说道。在这个页面的顶端,如果你想用版式的话,你得在那include(引用)你想用的版式。如果你的页面用的是网站默认的阈限版式或者你想给每个迭代用不同的版式,就忽略掉模版里的这个部分。在下面是CSS模块。你要在这里加入你想应用于所有页面的CSS。常见的放在这里的东西是引用字体,自定义div块或者版式相关的(比如改变文本颜色)。如果你不想放任何涵盖所有页面的CSS,就忽略掉模版的这个部分。再下面是评分模块。所有页面都要求有一个评分模块,这就意味着最好把它放在父页面上。否则你得在每个段落页上都加上它。再下面的就是实现魔法的代码了。若想让迭代起效,这段代码是必要的。再下面的是你的著作信息折叠块,这也是所有迭代都要求有一个的,所以最好把它放在父页面上,避免做在每个页面上都复制黏贴一遍的无用功。你格式化父页面后,就可以开始创建段落页了。
上面这段写得不甚清楚。实际上,主页面的结构是这样的:
(在迭代部分前面出现的东西)

ListPages模块

(在迭代部分后面出现的东西)

当页面链接改变,只有ListPages模块显示的内容发生改变,模块前后的东西都会保留。因此,如果所有迭代的主题版式、其他CSS样式、评分模块等都保持一致,它们应该被置于主页上。一般来讲著作信息要出现在每个迭代的尾部,那么就把它放在主页面上的ListPages模块之后。
ListPages模块是迭代的核心,前面提到过,迭代的原理就是通过改变页面链接控制这个模块的内容改变。

[[module ListPages category="fragment" parent="." limit="1" order="created_at" offset="@URL|0"]]
%%content%%
[[/module]]
  • category="fragment":抓取fragment:分类的页面。合规段落页用的都是fragment:分类。
  • parent=".":抓取的页面需要把父页面设为ListPages模块所在的那个页面,简单来说就是只抓子页面。
  • limit="1":一次只显示一个列表项。这是为什么你一次只能看见一个段落页的内容。
  • order="created_at":以创建顺序排列列表项。如果你用的是这样的ListPages模块,那么段落页必须按顺序创建。
  • %%content%%:显示列表项的页面内容,也就是让段落页的全部内容显示在主页面上。

要想创建段落页,最开始,你需要在页面名的开头加上“fragment:”。而在页面名的末尾加上一个数字。对于第一个段落页来说,那个数字是“0”。继续用这个页面的例子,第一个段落页叫做http://truthneverends.wikidot.com/fragment:dd-0。段落页在沙盒里也得是这样的,一点不错。为了把这个页面链接到父页面,你需要去底部菜单点“选项”,然后点“父页面”,如图所示:
pGdos.jpg
这个菜单显示之后,你需要在其中输入父页面的页面名。随即一个菜单会出现并询问你段落页需要链接到哪个页面。当你的页面名出现时,单击它。现在你设置好了你的段落页,随后你要开始写页面的实际内容了。你在段落页0中所写的任何内容都将在读者打开页面时首先出现,位列所有迭代或CSS转换之前。请仅在段落页0中放上你想要读者在其他任何迭代之前看到的东西。8

这之后,其实你只需要一遍一遍地重复这个过程,直到所有你需要的段落页都写好。对第一个段落页来说,链接是http://truthneverends.wikidot.com/fragment:dd-1,下一个就是http://truthneverends.wikidot.com/fragment:dd-2,以此类推。为了让读者进入下一个迭代,我们必须用另一个完全不同的链接。如果前面的所有步骤都已完美无缺,它才会起作用,否则它只会引向一个空页面。再再用这个页面做例子,去第一个迭代的链接是http://truthneverends.wikidot.com/dd/offset/1。这段语法在沙盒站也适用。文章要是通过绿灯了,把你的段落页发到站上之后给它们标上“段落”标签。如果你忘了的话,职员也会帮你做的。9

一个常见的错误就是用了连向段落页的链接而非这个特殊的链接,如果那样的话,在进入新页面后无法保留评分和讨论,不应该是那样的。10你的页面要是出错了,就再检查一遍你用的是这个特殊的链接还是连向段落页的链接。另外,标准的三括号链接不适配迭代链接,也就是说你必须得用单括号链接。这一段要是对你来说看不懂的话就去看看Wikidot语法指南吧。

唷!说的可真多。尽管说这看着挺吓人的,但我肯定你最后会掌握它的窍门的。第一次总是很困难,但只要你度过了难关,下次再做可就毫不费劲了。


疑难解答12
以下是一些常见的问题和它们的解决方式。迭代的程序很挑剔且困难,所以随时都可能遇到这些问题。

评分和讨论并未保持一致
如果你的评分和讨论在下个迭代并未保持一致,首先确保你链接的是下个迭代而非段落页。带你到下个迭代的链接应该是长这样的:http://truthneverends.wikidot.com/dd/offset/1,而非这样的:http://truthneverends.wikidot.com/fragment:dd-1

迭代链接引到了一个空页面
如果迭代链接失效了,首先确认你的链接没打错。迭代链接应当和父页面链接一致,除了结尾的“/offset/1”(或者其他数字,如果有多个迭代的话)。如果链接仍然无效,请确保你的代码是这样的[http://truthneverends.wikidot.com/dd/offset/1 显示的文本]或者[[[http://truthneverends.wikidot.com/dd/offset/1 显示的文本]]]亦或是[/dd/offset/1 显示的文本];而非这样的:[[[dd/offset/1|显示的文本]]]如果还是没用的话,请确保你的段落页连到了网站上的正确页面。要是你东补西补之后还还还没用的话,那你可能是忘记在编辑段落页之后刷新父页面了,然后BUG降临到了你头上。如果是这样的话,那这个页面已经没救了,需要把代码转移到新页面上

无法将段落页连至父页面
你是否在试图将段落页连接到父页面时得到了这段话作为回复?
[offset-guide-2

要是确实是这段文字的话,那就说明你忘了在父页面的页面名前加“collab:”了。如果想改正这个错误,只需要去到“设置”,然后去“重新命名”,随后在页面名前加上“collab:”。这个错法只会在沙盒站出现,你无需在得到绿灯后发到站上时担心。13

迭代页在段落页已连接的情况下还是空白的
如果发生的是这个错误,首先再检查一遍段落页是否连到了正确的父页面。如果仍然不管用的话,那就说明你在创建父页面之前就创建了段落页。当创建一个使用迭代的页面时,你创建页面的顺序对于Listpages代码的运作来说是极重要的。因此,你必须在创建页面时一丝不差地按照这个顺序。父页面必须在其他任何页面创建之前第一个创建。随后,你必须按照显示的顺序创建段落页。举个例子,段落页0需要是第二个被创建的页面,段落页1则是第三个,段落页2是第四个,以此类推。如果你在得到绿灯后发到站上时候没有遵循这个顺序,你需要删除所有的页面然后按照正确的顺序重新上传以修复这个问题。

小提示:如果你想要一种解决这个问题的简单方法,你可以同时打开父页面和多个段落页的编辑框,然后把沙盒里的代码复制黏贴进所有那些页面。只要所有代码都被复制黏贴完成而且编辑框都被打开着,你可以在几秒钟内保存所有段落页并且链接到父页面。使用这个方法之前记得把迭代链接改成站内的而非沙盒里的。

迭代顺序错乱
这是一个和上面的那个问题很相像的情形。如果你的迭代顺序错乱了,那就说明你创建段落页的顺序有错漏。举个例子,如果你在段落页0之前创建了段落页1,那页面就会把段落页1判断为段落页0,然后把它首先显示出来,你肯定不想要这样。如果你在沙盒站遇到了这个问题,那只要把两个段落页的代码互换就可以了。在确定可以提交之后,如果你在站上遇到了这个问题,你可以参考上个段落的小提示。


除非特别注明,本页内容采用以下授权方式: Creative Commons Attribution-ShareAlike 3.0 License