ListPages魔法與你
評分: +3+x

「ListPages」這個詞最近變得隨處可見。

有些時候是因為有人在求助台問著,看到某篇SCP裡使用的ListPages並且很想要重現它。有些時候是因為某個人很想知道如何做到一些特定的功能,而那答案正是ListPages。又有些時候是因為有些人張貼了你的頁面,並且告訴你應該要去使用它。

我已經在雨林之中冥想著「ListPages」這個詞有數月之久,而我的心靈已然昇華至遠超那些沉睡者的夢境所在。你可能知道那是什麼,你可能瞭解那代表什麼意思……但已經透過我的身軀感受到了ListPages課程的至高本質。感受到了它將永遠臣服於我的意志之下。

我已經扭曲了第5元素,ListPages,而在這份指南 — 應被認為是DrMagnusDrMagnus所著進階排版與你的延伸 — 裡,我將會試著傳授一些知識於你。



請注意,為了與頁面中的其他部分做出區別,我為每個ListPages範例都加上了灰色的背景。而你的ListPages模組只會有透明的背景。

先等等,Croquembouche!

「我不需要知道如何像堆積木那樣一步步做出ListPages模組!」,你是這麼告訴我的。「我只想知道要怎麼做出SCP-2998SCP-2111SCP-3002之中使用的ListPages迭代。」

於是我這麼回答:別想,學習好基礎真的是件很重要的事。你完全可以複製貼上那些代碼,但當它出錯的時候你會不知道為什麼,以及該怎麼修復它?

但如果你真的已經瞭解這些東西了(或想假裝你瞭解了),好吧,拉下去到ROUNDERHOUSE的第5節:速成課程。但別說我沒有警告過你。


1:什麼是ListPages?


ListPages是Wikidot的模組。它完整的說明文件可以在這裡被找到。

引用文件內容:

ListPages模組是個多用途且可廣泛使用的工具,可以用來選擇並展示網站內的頁面。

這就是它所做到的 — 字面上的 Lists列出 Pages頁面

ListPages在SCP維基上主要有兩種用途:

  1. 為了過濾出特定種類的頁面,並且把它們列出來。
  2. 為了允許一個SCP(或任何頁面)看似有多個頁面來讓你一頁一頁的看過去,但它們卻有著相同的評分模組。

前者是那個「無聊但是很有用的」。我們就叫它列出頁面,因為這就是它所做到的。這裡有個主站的範例是在一個頁面裡使用4個ListPages模組來列出頁面

然而後者,就是那一個,那一個每個人都想知道的好東西。事實上,我們稱呼它為ListPages迭代ListPages Thing。簡稱LPT。這裡有個使用到LPT的範例頁面

但首先,列出頁面是個比較好去解釋的方法,所以我會用它來講解你在第二個裡面應該要知道的大部分東西,也就是ListPages迭代(LPT)。

警告

試著限制你自己的每個頁面裡只使用一個ListPages模組。

ListPages模組真的能拖慢一個頁面的載入速度。我的人事頁面裡一次使用了大概三十個,而我發誓它花了我整整一分鐘在載入。那真是糟糕透了。別這麼做。


2:列出頁面


不繼續閒聊了,讓我們開始談談ListPages的第一個實例:簡單的列出頁面。

這裡列出了維基裡,我1被評分前5差的頁面。

如果你認為我只是打上URL並把它們留在這裡,再想想吧。你正在見證ListPages魔法。如果你想要,你可以隨便點選其中一個頁面,upvote它(拜託 :'(),然後刷新這個頁面來證明。你會看到原本紀錄在這裡的投票分數,將會跟著改變。

如果你檢查這一頁的原始碼,你將會看到以下的代碼:

[[module ListPages created_by="Viken-K" order="rating" limit="5" separate="no"]]
* %%title_linked%% (+%%rating%%)
[[/module]]

對於裡面寫著什麼沒有頭緒嗎?別擔心 — 這就是這份指南存在的目的。

如果我想,我可以秀出我被評分前5高的頁面。我也可以秀出超過5個。或是僅在某一天之後所創建的頁面。這裡有一大堆ListPages模組接受的參數來讓你為所欲為。

我將會透過以下三個步驟來帶你瞭解ListPages:

  1. 選擇你所想要的頁面
  2. 修改清單該要如何處理這些頁面
  3. 實際把清單展示出來


2.1:選擇你想列出的頁面


如果你沒有指定任何的參數,ListPages將會試圖列出維基上的所有頁面。那不是你的目的(對吧?),而這就是為什麼我們要指定「選擇器」。它們告訴了ListPages哪些頁面要挑出來,而哪些頁面要跳過。

讓我們來看看這每一個選擇器的功能是什麼吧。

ListPages有一大堆你可以選用的選擇器,來讓你精確地告訴它哪些頁面要被挑出來。這裡有幾個非常實用的選擇器:

  • created_by — 作者名字的篩選器。如果你將這設置成 "Croquembouche" ,那麼ListPages就只會列出由我創建的頁面並忽略其它的。請注意這只會選擇實際上是由這名用戶張貼在維基上的頁面!ListPages無法看出背後的合著或合作關係。
  • rating — 評分值的篩選器。如果你將其設置成 ">20" 的話,你將只會看到那些評分值超過20的頁面。而如果你將其設置成 "=0" 的話,你就只會看到那些評分值為0的頁面。
  • tags — 標籤的篩選器。如果標籤的開頭有 "+" ,ListPages就只會秀出帶有這個標籤的頁面。如果標籤的開頭有 "-" ,則ListPages就只會秀出不帶有這個標籤的頁面。舉例來說, "+scp -keter" 將列出所有帶有 "scp" 標籤但沒有 "keter" 標籤的頁面。
  • created_at — 頁面創建時間的篩選器。這個選擇器接受相當大範圍的數值。 "2009" 代表將選擇出所有創建於2009年的頁面,而 "2009.02" 將侷限至創建於2009年2月的頁面。 ">2009.02" 則代表著選擇出所有在2009年2月之後創建的頁面。而 "last 3 month" 將選擇出所有於過去三個月裡所創建的頁面。
  • name — 頁面名稱的篩選器,或者說,頁面的URL。 "SCP-3000" 將會配對至SCP-3000那一頁。使用百分符號用來表示說「以這樣子開頭的頁面」 — 舉例來說, "SCP-%" 將配對至所有開頭是「SCP-」的頁面。
  • category — 頁面分類的篩選器。預設來說,ListPages只會看向那些與當前頁面相同分類的頁面。以這一頁來說,它的分類是「_default」。而page-tags是「system」,並且像earthworm它的分類是「component」。檢查一下URL — 所有在冒號之前的都是分類,而如果這裡沒有任何冒號,這就代表它的類別是「_default」。分類選擇器讓你可以指定不同的分類。設置成 "*" 則可以選擇所有分類。

總結來說:所有選擇器將配對至特定的頁面,並忽略其它的。出現在清單內的所有頁面,其必定符合你所有的選擇器。

這份文件 將更深入的去講述這些選擇器 — 以及其它的! — 的細節,就在「Selecting Pages」標題下面那裡。


2.2:修改清單


僅僅只是把不同的頁面挑選出來並不完整 — 我們還要指定這些頁面將要以什麼樣的形式展現出來。

這裡有一些你必須知道的額外參數。它們並不是選擇器,所以沒有被列在上面的章節,但它們的使用方式是完全相同的。

  • limit — 決定要秀出多少個頁面。如果你將其設置為 "5" ,那它最多就只會展示出5個頁面。
  • perPage — 清單的每一個頁面可以顯示多少個……頁面?(這沒有聽起來那麼難啦!)預設來說,這個值被設置成20,所以如果清單內有著超過20個頁面,它將會創建新的一頁。你可以在主站本月最高評分看到它的效果 — 在SCP清單的最底部(假設這個月已經過了一個禮拜以上)。允許使用的最大值是250。
  • separate — 你是否要讓清單內的每一項條目單獨分開來成各自的清單,或是全部集合成相同的清單。允許值為 "yes" 和 "no" — 如果你的選擇是 "yes" ,你將會得到一個在條目之間有著大大的空隙的清單,那通常不是你想要的結果。
  • order — 清單該如何排列。

"order" 參數可接受多種獨特的選項,它們被列在這份文件裡,在「Ordering Pages」標題底下。我將會在這裡列出一些比較有用的選項。

  • order="rating" — 根據評分值排序。
  • order="name" — 根據頁面名稱,照字母順序的排序(於URL中所明確看到的)。
  • order="title" — 根據頁面標題,照字母順序的排序(頁面的實際標題)。
  • order="created_at" — 根據頁面創建的時間來排序。
  • order="comments" — 根據評論數來排序。
  • order="random" — 讓所有東西隨機的排序!每一分鐘重新打亂一次。

預設來說,所有東西的排列都是遞升排序(所以較小的數字會排在前面)。為了讓它變成遞降排序,在後方加上 'desc' — 像是 order="rating desc" 。

請注意,這裡沒有特別的選項明確指出是用來遞升排序東西的。而正確的使用方式是添加 "desc desc" 。這有道理嗎?沒有。我們能期待Wikidot做出更好的東西嗎?不能。


2.3: 展示清單


好的,我們已經知道該如何挑選我們想要的頁面,以及該如何調整列出清單的變數。我們已經得到了一份頁面的清單。

而當你要開始展示清單時,你也會有很多選項可以選擇。在模組的身體裡 — 也就是 [[module]][[/module]] 之間 — 你可以放置多種不同的內容標識。

所有的內容標識就像是印章。我們以 %%title%% 為例,它代表著頁面的標題。請你試著想像:ListPages模組有著標題的清單。它在頁面上蓋下了第一個標題,然後往下,換下一個標題並且蓋下去。然後不斷重複,蓋完整個清單。而你最後會獲得一整頁的標題清單。

這裡也一些比較常用的內容標識。如往常一樣,這份文件裡有完整的列表,就在「Sections head/body/foot」那裡,所以請務必過目一下這份文件。

  • %%title%% — 代表著頁面的標題。
  • %%title_linked%% — 代表著頁面的標題,同時是個可點擊的連結。
  • %%created_by%% — 代表著頁面的作者。
  • %%created_at%% — 代表著頁面創建的日期。
  • %%rating%% — 代表著頁面的投票值。
  • %%index%% — 代表該頁面在清單中的位置。
  • %%content%% — 代表這個頁面的整個內容。我們回過頭來再說說這個東西。

說真的,我只列出了7個,而它全部共有56個 — 但它們有些都鮮少有人去使用。

請注意

ListPages不能展示出你SCP的真正標題。舉例來說如果你想列出SCP-173,你沒辦法要ListPages展示出「塑像」。

這是因為SCP標題只被記錄在SCP系列頁上,而不是SCP自己的頁面中。因此ListPages無法取得那些資訊,因為它只列出被選擇頁面中的基本資訊,而不去管其它頁面中有相關的。


所以我們現在認識到了不少參數,讓我們來開始建構吧。

我想要列出……

  • 最近三個月內創建的所有頁面……
    • created_at="last 3 month"
  • ……頁面名稱是以字母「S」開頭的……
    • name="S%"
  • ……評分值要小於100的……
    • rating="<100"
  • ……而且沒有被標上「scp」標籤。
    • tags="-scp"
  • 我想要秀出不超過40個結果……
    • limit="40"
  • ……然後每頁只要10條結果就好了……
    • perPage="10"
  • ……我要他們全部待在相同的清單內,而不是分開來……
    • separate="no"
  • ……最後我想要他們依照評分值排序,還要是遞降排序。
    • order="rating desc"
  • 我想要這些頁面是有序清單……
  • ……還要寫出頁面建立的日期……
    • %%created_at%%
  • ……還要有頁面的標題連結……
    • %%title_linked%%
  • ……還要有作者的名字……
    • by %%created_by%%
  • ……最後還要有頁面的評分值,被包在括號裡。
    • (%%rating%%)

所以我寫出了下面的ListPages模組:

[[module ListPages created_at="last 3 month" name="S%" rating="<100" tags="-scp"
limit="40" perPage="10" separate="no" order="rating desc"]]
# %%created_at%% %%title_linked%% by %%created_by%% (%%rating%%)
[[/module]]

……而它輸出了以下的清單:

  1. 06 Jun 2020 08:28 SCP-ZH-103 相關實驗記錄 by Danza (14)
  2. 02 Jul 2020 17:53 繁中站點地下街 by Dr V Valentine (13)
  3. 27 May 2020 00:33 SPC-ZH-795 by ting129 (13)
  4. 08 Jun 2020 04:19 記憶的洪流 by Boooonta (11)
  5. 22 May 2020 13:07 3D油飯 by Nihilmace (9)
  6. 09 Jul 2020 05:45 日本分站的貓咪? by drmei4220 (8)
  7. 20 Jun 2020 16:57 夏之雪 by K the intern (8)
  8. 17 May 2020 06:46 瓶中船中心頁 by Reverberate_a (8)
  9. 05 Jul 2020 10:32 喵喵爪爪,打打鯊鯊 by Nihilmace (7)
  10. 23 Jun 2020 01:00 節分 by Qmariocurl (7)
page 1 of 212next »

這是個很有用的清單?才怪。但它是個很好的例子。

酷啦。如果你正在沙盒裡照著做,恭喜你,你剛製作了一個ListPages模組。如果你沒有,不論如何還是恭喜啦,但有點可惜。

注意: 如果你決定在沙盒裡製作ListPages模組,請注意你看到的頁面都是來自沙盒站的,而不是主要的維基!那每次都讓我嚇的措手不及。

回家作業:順著主站的近期創建頁往下,點擊Option中的Page Source按鈕,你應該可以找到ListPages模組,然後看看你是否瞭解那裡面的每一部分。如果你看到我沒有講解到的東西,確保你有把那份文件帶在身上!


也請注意到,ListPages的內容部分並未被侷限在只能有一行。如果你想要的話它可以分好幾行來使用。

如果你使用超過一行,我建議你設置 separate="yes",要不然它看起來會有一點令人困惑。


現在我已經講解完ListPages的基礎,是時候前往那最廣為人知的應用了。


3: 來搞一點ListPages迭代吧


從這裡開始事物會變得比較棘手。

SCP-2998SCP1893SCP-1173是幾個廣為人知有使用ListPages迭代的頁面,並且肯定要為這波風潮負起一點責任。這三篇都是由EskobarEskobar所撰寫的,而他又是師承AelannaAelanna,所以你勢必要好好的感謝他們倆。

在那之後,有許多的頁面也使用了ListPages迭代。像SCP-2111SCP-3002SCP-3939SCP-3449我的人事頁SCP-3020Jim North的提案,族繁不及備載。
如果你的頁面也用了ListPages迭代,留個評論來讓我們知道吧!

我認為3939運用的最好。雖然我可能對其有一點點偏袒。

從現在起,我將會簡稱ListPages迭代ListPages ThingLPT


請注意!使用LPT會造成一定程度的負擔:你的讀者將會期望你有非常正當的理由去使用它。LPT應該要被保留給那些龐大到需要LPT來讓它的概念和/或格式正常運作的文章。LPT並不適合於SCP-庸俗之物2


3.1:什麼是LPT?


當你看到一個SCP(或任何頁面)看起來有多個頁面,但都使用著相同的評分模組時,那應該就是LPT了。LPT可以簡單地透過在點擊頁面中的連結後,確認URL來識別 — 如果它結尾是「/offset/X」,而 X 是一個數字的話,那就是LPT了。大部分(但不是全部啦!)LPT的應用都可以被用這種方式識別出來。

更準確來說,是維基上的某一頁因刷新或是點擊連結而改變內容時。

在這個規則之中也有些例外 — SCP-2786SCP-3211並不是LPT,因為他們使用 [[html]] 而不是 [[module ListPages]][[html]] 可以被透過頁面的某一部份需要比其他部分還來的長的載入時間來識別,並且你還能注意到它的改變是立即的。

LPT的改變,不像 [[html]] ,只能在刷新頁面或是使用者導向至 /offset/ URL時才會發生。

SCP-3340則更加令人困惑了,因為它是使用 [[html]] 來開發(不是ListPages),然而它的改變只會發生在你重刷頁面的時候。

所以,總的來說:

LPT和 [[html]] 都是種讓頁面的內容看起來發生變化的技術。

LPT是基於ListPages開發的。而 [[html]] 則包含了HTML,CSS,有時候還有JavaScript。

[[html]] 可以使任何任何東西立即的發生改變,但它僅能影響在一開始就被包覆在 [[html]] 區塊內的內容。

由LPT所致的的改變可以影響整個頁面,但它只會發生在用戶點擊至其他偏移頁或是刷新當前頁面時。

LPT是很好學的。而 [[html]]相對麻煩了許多

警告

根據文件所述,ListPages模組和 [[html]] 無法完美的一同運作!你不能在LPT的任何子頁面裡使用 [[html]] 。去怪Wikidot吧。

你只能使用其中一個,而不能兩個都要(雖然有些文章同時容納了LPT和 [[html]] ,但那是因為他們是彼此獨立的)。選擇那個最能幫助你的文章和/或以你的技巧最能駕馭的。


3.2:LPT是如何運作的?


LPT無疑是個標準列出頁面技術的特定應用。

這裡是個普遍使用的ListPages模組。抄抄筆記把這裡面使用的特定參數記下來。

[[module ListPages category="fragment" parent="." order="created_at" limit="1" offset="@URL|0"]]
%%content%%
[[/module]]

這裡有一些新的專有名詞,所以就讓我來講解一下吧。

  • category="fragment" — 選擇分類是「fragment」的頁面。「fragment」分類的頁面不會出現在每月評分值最高或是最新詞條一覽裡。這讓我們可以很方便的創建子頁面,那裡我們稍後再談。然而,它們不是完全無法被偵測到的。
  • parent="." — 父頁面選擇器會去配對出誰的父頁面與參數值是相同的。parent="." 配對至的是當前頁面的父頁面。為了設置一個頁面的父頁面,點擊底部的「選項」,再來是「Parent」,然後打上你想要設置成父頁面的那一頁的頁面名稱。
  • order="created_at" — 你應該要知道這是做什麼的 — 他透過創建日期來排序頁面。SCP-1893實際上是隨機性的排列頁面。
  • limit="1" — 將ListPages選擇的頁面數限制為1。也就是一個頁面。
  • %%content%% — 這個佔位符號的意思是,比起只是把頁面的一小部分資訊,像是頁面標題或評分值抓進來,ListPages將會把整個被選擇頁面的內容全部塞進當前的頁面裡。包括CSS模組也是。
  • offset="@URL|0" — 這個部分比較難以解釋,所以我晚點會用圖片來說明。


3.3:偏移參數


好,當作我們剛寫完了我們的SCP。而下圖的綠色方框代表了全新的SCP頁面。

lp1.png

現在讓我們把ListPages模組放進去。這用一個大洞來代表(稍後會被%%content%%所填入的地方)。

lp2.png

再來,讓我們創建兩個子頁面(child pages)。這些頁面將會被填進父頁面的洞裡。

我稍後會詳盡的說明子頁面到底是什麼以及該如何創建,但現在,我將用這些醜陋鮭魚方塊來代表它們:

lp3.png

所以這兩個子頁面(鮭魚)是那個父頁面(綠色的)的孩子了。

在父頁面裡,我們將要寫上ListPages模組來選擇並展示那兩個子頁面的內容:

[[module ListPages parent="."]]
%%content%%
[[/module]]

而它讓我們的父頁面變成這副模樣:

lp5.png

我們已經遇到問題了:父頁面同時展示著它們兩個子頁面的內容。因為,預設來說,ListPages會盡可能地將頁面列出來。

所以,我們設置 limit 為1,來迫使ListPages只秀出一個頁面:

[[module ListPages parent="." limit="1"]]
%%content%%
[[/module]]

這讓我們得到了以下的結果:

lp4.png
太棒了!我們現在讓ListPages模組只顯示一個子頁面的內容了,而另一個子頁面已經準備好並等待著在讀者閱讀完時,再秀出它的內容。

所以我們該怎麼實際上的秀出第二個子頁面呢?

我們已經知道讓父頁面「更寬」 — 也就是讓它一次秀出兩個子頁面 — 是沒用的,因為讀者仍然可以看見第一個子頁面。

所以我們要做的是,把父頁面移動到右邊。

lp6.png
[[module ListPages parent="." limit="1" offset="1"]]
%%content%%
[[/module]]

我們可以透過利用 offset 參數來完成這件事。你可以簡單的想像 offset 就是列表起點與你的目標子頁面之間的距離。

lp7.pnglp8.pnglp9.pnglp10.png

offset 的預設值是「0」,這代表著它將會秀出清單中的第一個子頁面。如果你想要,你可以手動修改這裡的數值,但你為什麼要自找麻煩呢?

offset="@URL" 代表了比起使用預先決定好的偏移數值,轉而使用URL來設置。如果你的頁面結尾有著「/offset/X」的話,那就意味著URL設置了這個頁面ListPages模組的偏移值。舉例來說,http://www.scp-wiki.net/scp-2998/offset/1

這讓我們有辦法透過給予讀者通往下一頁的URL來改變偏移值。SCP-2998在每個子頁面的底部留下了連結。SCP-3939則是在子頁面的的底部給予讀者多個連結。

offset="@URL|0" 會根據URL來設置偏移值,但如果URL沒有指定偏移 — 像是當讀者第一次載入頁面時 — 的話,它將會設置成0。它可以依照你所需來設置 — "@URL|21" 就是個允許的數值 — 但0通常是最好用來操作的。那只是與你的子頁面排序在什麼位置有關,以及你想讓哪一個首先被看到。

並未給予讀者任何的連結。取而代之,頁面透過使用 order="random" 來隨機排序。它的偏移值仍然是預設值 — 0 — 所以不論何時改變了排序,都是展示著清單中的第一個頁面(像是,隨機SCP作品)。

  • 與 order="random" 有關的注意事項: 透過 order="random" 來排序頁面是每一分鐘更新一次。好消息:它是自己重新打亂的,所以你不需要做任何事。壞消息:它不會以更快的速度來重新打亂。不斷的刷新頁面不會帶領你到達任何地方 — 你還是要乖乖地等一分鐘。


3.4:創建子頁面


綜上所述,LPT需要一個父頁面和多個子頁面來運行。

通常把父頁面留到最後在創建是比較好的選擇,因為子頁面需要花較多的時間去處理,所以我將會先詳述該如何創建它們。理想上不論如何你都要先在沙盒裡創建和測試,希望這應該不會造成你的困擾,但畢竟這麼做比較保險。

子頁面是用來裝載著LPT要抓取的內容的。

我會以SCP-3939當作範例。

它的ListPages模組裡有個 offset="@URL|0",所以它的主頁面會跟 SCP-3939/offset/0 一樣。

而它的子頁面正指向了fragment:SCP-3939-0。打開子頁面和父頁面的原始碼來看一下,然後來玩個大家來找碴的遊戲,看看它們差在哪裡。

你應該注意到了以下三點:

  1. 子頁面容納了那些還不存在於父頁面的內容。
  2. 子頁面容納了帶領讀者到達不同偏移點的連結。
  3. 父頁面有著評分模組以及所有的CSS格式 — 也就是所有頁面都需要的東西。

至於第3點,如果你想要的話也可以把它們放在所有子頁面上,但放在父頁面很明顯比較省力。如果你想要改變某個東西,你只需要在父頁面上改一次就好了,而不是花費大量時間在修改每個子頁面。

請注意在SCP-3939的例子裡,圖片被放在子頁面裡而不是放在父頁面,因為有一個頁面不應該出現那張圖。如果他被放在父頁面上的話,那張圖片將會被迫出現在所有頁面中。
如果你準備要這麼做,請你只要在一個頁面上傳圖片就好了!

你通常會把幾乎所有的內容放在子頁面裡,但你其實不一定要這麼做!看看SCP-3306的LPT,它的ListPages模組被放置在頁面最底下,並且只有替換掉結尾而已。


為了要創建子頁面,在維基裡創建一個頁面叫「fragment:某某某」,裡面的「某某某」看你要打什麼都行。

讓URL以「fragment:」開頭超級重要。段落頁不會出現在本月最高評分、最新詞條一覽或站點近期編輯(儘管它們會出現在站點近期修訂啦)裡。同時,jarvis和scpper也不會計算段落頁的投票總數/平均值,所以它們影響不了任何東西。

那個「某某某」看你要打什麼都行,然而我個人是建議你跟著你SCP檔案的編號以及偏移位置來命名。以 SCP-XXXX 為例,它們將會是 fragment:SCP-XXXX-0、fragmeny:SCP-XXXX-1、fragment:SCP-XXXX-2,以此類推。

並在你的每個子頁面裡重複以上的操作。

確保你以正確的順序創建子頁面!在這份指南裡,因為我們使用了 order="created_at",所以我會建議你依照創建的時間來排序。你可以用任何你喜歡的方式去做排序,但是如果你是依照日期/時間來排列的,請確保你創建的順序是對的。

確保你的子頁面裡有包含著偏移點的連結,來讓你的讀者輕鬆的導向至下一個偏移點!


下一步是要幫你的所有子頁面設定父頁面。在每個子頁面點選底部的「選項」按鈕,再來是「Parent」,然後輸入你要設為父頁面的頁面名(那個URL,就這樣 — 不是頁面標題!)。一旦你輸入了些字母之後,你想要設定成的父頁面應該就會自動跳出來了。

如果你還沒創建父頁面,它就不會出現在列表裡。別擔心 — 只要創建完父頁面之後再這麼做就好了。


3.5:創建父頁面


現在我們有子頁面了,我們需要來個父頁面。父頁面就是那個綠色像鏡頭一樣的東西,一個一個的掃過那些鮭魚色的子頁面。

你需要做的只有創建一個新的頁面 — 這一次創個平常的就好,不是「fragment:」分類 — 然後把ListPages模組塞進去。

以下是我建議使用的ListPages模組:

[[module ListPages category="fragment" parent="." order="created_at" limit="1" offset="@URL|0"]]
%%content%%
[[/module]]

這跟3.2節:「LPT是如何運作的?」裡面使用的是相同的模組,而我在上面已經講解過所有專有名詞了。

你唯一可能想變更的專有名詞就是 order。我總是建議你照著你所想看見的順序創建子頁面,也就是用「created_by」來排序。然而,如果你有照著我的建議來命名子頁面的話,你也可以用「name」或是「title」來進行排序。如果你想要的話,你也可以跟隨著SCP-1893的腳步使用「random」來排序。

在沙盒站裡,父頁面必須要有著「collab:」分類。請確保你的URL是以「collab:」開頭。
ListPages預設尋找與父頁面相同分類的頁面,所以如果在沙盒站裡使用時,你選擇忽略「category」選擇器的話,你所有的子頁面都必須要是「collab:」分類。


如果你還沒這麼做,記得把這頁設為那些子頁面的父頁面。

在沙盒站裡,除非你忘了在父頁面URL的開頭打上「collab:」,否則你不需要這麼做。如果你忘了這一步,別擔心 — 點選底部的「選項」按鈕,再來是「重新命名」

先等等,Croquembouche!

「你為什麼要用這些特定的選擇器?」你是這麼問我的。「 parent="."order="created_at" 非常的好用沒錯,但為什麼阻止我使用其他我想用的選擇器呢?」

而我是這麼說的:沒什麼。你可以使用任何你想要的選擇器來選取的的子頁面。

但這裡有幾點要注意:讓我們假設你創建一堆頁面叫做 fragment:SCP-XXXX-0fragment:SCP-XXXX-10。而你使用 order="name" 來排序,並用 category="fragment"name="SCP-XXXX-%" 來篩選。它也成功了!完美。

但你沒辦法阻止任何人在你的清單中插入頁面,如果有人有心這麼做的話。如果有人在你不知情的情況下創建了 fragment:SCP-XXXX-0a ,那麼它將會出現在清單中0到1之間的位置,並打亂了你的整個偏移鍊。

帶有惡意的人除非可以回到過去,否則沒辦法在你使用 order="created_at" 的情況下插入頁面。事實上,如果你加上 created_by="你的使用者名稱" 會更加安全。除非你正在進行合著,否則你沒理由不這麼做。

parent="." 真的很棒因為它能自動的在所有子頁面的最上方留下指向父頁面的連結。對那些不知道自己是怎麼到那裡的迷途羔羊來說非常有用。

並且,如果你想當個好人,確保你在某處留下子頁面的清單。對未來的翻譯者來說會非常的便利,並且對那些想打聽你是如何做到的人來說會很方便。

當然啦,當你發布了有使用LPT的SCP時,記得在這一頁的留下一則評論喔!


4:總結


好的。你完成了。你知道你已經知道列出頁面和ListPages迭代的基本知識了。

儘管如此,請謹慎行事:你現在掌握著強大且令人畏懼的力量;也就是ListPages。睿智的去使用它,負責任的去使用它,還有最重要的一點:有節制的去使用它。ListPages格式技巧在你使用的恰當時是令人驚豔的。但當你搞砸了,你只會讓所有使用ListPages的頁面受池魚之殃。

在討論區獲取評論,但更重的是在開始寫作前檢查一下你的點子。沒有什麼事情會比把你的精力投注在一個毫不值得的點子上更糟糕了。


當然,除了這裡有詳述的2到3種非常特別的案例外,ListPages還有其他的用途。

使用隨機ListPages序列來製作模組化的文章,這樣能讓你每次閱讀時都會的到完全不同的結果。與 [[tabview]] 一起使用ListPages來把腳註分個在不同的分頁裡。

嘗試看看那些以前沒有人做過的東西。這就是你最好掌控力量的方式。


如果你仍然有疑問,請在他們的討論區詢問,而我會確保他們會回答的。

感謝您的抽空閱覽。

Croquembouche,告辭。












5:速成課程


現在Croque已經提供必要的技術講解了,而我,ROUNDERHOUSE,將要開始回應你的求助,我親愛的讀者。像我這樣的人,不願意去讀上面那些東西,或是透過範例來學習。這裡將會開授一門關於如何快速建立你文章裡需要的LPT的速成課程。然而,如果你搞砸了某個東西,你將會需要知道該如何像Croque說的那樣來修復它。我強烈的建議你至少先試著看過上面的所有東西,再來看這裡的懶人包。接下來我將會用SCP-9000這個佔位用的文章來做範例。如果你看見「scp-9000」,請把它替換成你文章使用的號碼。


5.1:段落時間


首先,決定你在你的ListPages文章裡要用到幾個頁面。讓我們假設你要三個好了。你將要透過普通的頁面產生器創建三個頁面,並且全部都是段落分類。
重點提醒:照著你想要展示出的順序來創建頁面。所以你的頁面將會是「fragment:scp-9000-1」、「fragment:scp-9000-2」和「fragment:scp-9000-3」。你最先寫上去的就是你想要它成為第一個迭代的頁面,第二個就是第二迭代,後面以此類推。很顯然,你不需要為他們命名,即使這很簡單並且容許一點點的誤傳。另一條提醒:不要在這些頁面裡放上評分模組。當被抓進去ListPages時,它們會搞砸一點東西。


5.2:家中父母


再來,你將要製作一個父頁面。以我們在製作的SCP-9000來說,我們應該要在主列表的對應位置創立頁面。而在裡面,我們將放上這些東西:

[[>]]
[[module Rate]]
[[/>]]

[[module ListPages  category="fragment" parent="." limit="1" order="created_at" offset="@URL|0"]]
%%content%%
[[/module]]

[!-- http://www.scp-wiki.net/fragment:scp-9000-1 --]
[!-- http://www.scp-wiki.net/fragment:scp-9000-2 --]
[!-- http://www.scp-wiki.net/fragment:scp-9000-3 --]

那些被框在[!-- ]裡的東西是原始碼註解。他們不會秀出在頁面上或被解讀成任何代碼。他們最常是被用來方便編輯,還有協助翻譯者。


5.3:教子守則


好,現在讓我們回到段落頁。你要開始把它們的父頁面設置成你的主頁面。用圖片的解說效果勝過千言萬語。

1ym7vM4.png

phcCo0p.png

對你的所有段落頁都這麼做,很顯然的,你要把「scp-9000」替換成你們各自的文章。

來自Croque的提醒:在沙盒站上,父頁面必須是 collab 分類,否則你將會在設置父頁面時遇到錯誤。你可以在頁面底下的,點擊 +選項 ,然後是 重新命名,並在頁面名稱前面加上「collab:」。


5.4:轉跳


好的。很顯然你已經準備好要在你的頁面裡加入通往其他頁的選項了。為此,你不能只用普通的超連結。因為我的文章將會開啟「fragment:scp-9000-1」的內容,而我需要一種方式來前往「fragment:scp-9000-2」。為了這麼做,我可能要編輯「fragment:scp-9000-1」來在裡面加入類似下面看到的東西:

[[>]]
[[[http://www.scp-wiki.net/scp-9000/offset/1|下一迭代]]]
[[/>]]

「offset/1」實際上會將頁面導向至「fragment:scp-9000-2」的內容,並且將其展示出來。你也要在「fragment:scp-9000-2」做類似的的事情,然後再加上一個倒退回去的連結。

[[<]]
[[[http://www.scp-wiki.net/scp-9000|上一迭代]]]
[[/<]]

[[>]]
[[[http://www.scp-wiki.net/scp-9000/offset/2|下一迭代]]]
[[/>]]

你也要在「fragment:scp-9000-3」做類似的事。


5.5:然後祈禱吧


假設你正確的跟著所有指示做,那你應該會成功才對。當你去到scp-9000的頁面時,它應該要讓你看到它把 fragment:scp-9000-1 的內容展示在這個頁面上,並且有個連結導向至 offset/2,能自豪的展示出 fragment:scp-9000-2 中的內容,如此如此這般這般。它們應該要共享同一個評分模組,也就是它們實際上得分是共同的。當你遇到問題或事感到困惑時,請不吝PM我。

你最誠摯的,RounderhouseRounderhouse。👋

除非特別註明,本頁內容採用以下授權方式: Creative Commons Attribution-ShareAlike 3.0 License