ListPages 마술과 당신
평가: 0+x

The word "ListPages" gets thrown around a lot.
"ListPages, 리스트페이지"라는 단어는 꽤 자주 쓰여집니다.

Sometimes it's from someone at the Questions Desk who saw an SCP using ListPages would really like to replicate it. Sometimes it's from someone who wants to know how to do a specific thing and the answer is ListPages. And sometimes it's from someone posting on your page to tell you that you should be using it.
어떤 때는 ListPages를 쓰는 SCP를 보고 어떻게 베끼냐고 물어보는 사람을 통해서 질문란에서 들리고, 어떤 때는 어떤 사람이 어떤 특정한 걸 어떻게 하나고 물어보고 답이 ListPages죠. 그리고 어떤 때는 누군가 당신의 페이지에 포스트로 이걸 써보라고 하기도 하죠.

I have meditated for months in the rainforest on the word "ListPages", and my mind has ascended to places beyond the deepest sleeper's dreams. You may know what it is, you may even know what it means… but I have felt the very essence of ListPages course through my body. I have felt its ethereal form buckle under my will.
전 "ListPages"란 단어로 열대우림에서 몇 달간 명상하고, 제 정신은 가장 깊은 수면자의 꿈속을 넘어 승천했죠. 당신은 이게 뭔지 알 수도 있고, 이게 뭔 뜻인지 모를 수도 있죠… 하지만 제 몸을 통해 ListPages 과정의 정수를 느꼈습니다. 제 의지 아래에서 이것의 에테르 형태의 휨을 느꼈습니다.

I have bent the 5th Element, ListPages, and in this guide — which should be considered an extension to DrMagnusDrMagnus' Advanced Formatting and You — I'll attempt to pass this knowledge onto you.
전 제5원소 ListPages를 휘고, 가이드에 집어넣었습니다. — 이건 DrMagnusDrMagnus' advanced-formatting-and-you의 확장판입니다. — 전 당신에게 이 지식을 전달할 것입니다.

Please note that in this guide I've given each example ListPages module a grey background, just to distinguish it from the rest of the page. Your ListPages modules will have a transparent background.
이 가이드는 각 ListPages 모듈의 예제에 나머지 페이지와 구별이 좀 되도록 회색 배경을 넣었습니다. 당신의 ListPages 모듈은 투명 배경일 것입니다.

Hold on there, Croquembouche!잠시만요, Croquembouche!

"I don't need to know how to make a ListPages module from scratch!", you tell me. "I just want to know how to do the ListPages Thing used in SCP-2998, SCP-2111, and SCP-3002, amongst others."
"전 ListPages 모듈을 어떻게 처음부터 만드는지는 알 필요 없어요!" 당신은 말하죠. "전 그냥 SCP-2998, SCP-2111, SCP-3002 같은 거에서 쓴 ListPages를 어떻게 쓰는지 알고 싶어요."

And to that I say: no, it's really important to learn the basics as well. It's all well and good copy-pasting code, but when that goes wrong and you don't understand why, how do you fix it?
그리고 전 말하죠, 기초를 배우는 것도 정말 중요합니다. 코드 복붙도 좋지만, 고장나고 이유를 모르면, 어떻게 고칩니까?

But if you really do know all this stuff already, scroll down to Doing the ListPages Thing.
하지만 당신이 이놈을 이미 잘 알고 있다면, Doing the ListPages Thing로 가세요.

1: ListPages란 무엇인가?

ListPages is a Wikidot module. Its full documentation can be found here.
ListPages는 위키닷 모듈입니다. 전체 목록 문서는 여기입니다..

To quote the documentation:
문서의 구절입니다.

The ListPages module is a general-purpose and widely-used tool that selects and display pages within a site.
ListPages 모듈은 사이트 내의 페이지를 선택하고 보여주는 일반적 목적과 넒은 이용을 위한 툴입니다.

That's all it does — it literally Lists Pages.
이게 답니다. — 말 그대로 페이지 리스트죠.

ListPages generally has two uses on the SCP wiki:
ListPages는 SCP 위키에서 주로 2가지 용도로 쓰입니다.

  1. To filter the wiki for a specific group of pages and show them in a list,
  2. To allow an SCP (or any page) to appear to have multiple pages which you go through one-by-one, but they all have the same Rating Module.
  3. 위키의 페이지를 특정한 그룹으로 묶고 리스트로 보여주기 위해.
  4. SCP(아님 딴 페이지)가 여러 페이지를 하나씩 보여주지만 같은 평점 모듈을 가지도록 하기 위해.

The first one is the "boring but useful" one. We'll just call it Listing Pages, because that's what it is. Here's an example page with 4 ListPages modules that List Pages.
첫번째는 "지루하지만 유용한" 기능이죠. 이걸 그냥 리스팅 페이지Listing Pages라고 부를 겁니다, 왜냐면 이게 그거니까요. 여기 4개의 ListPages 모듈을 가진 페이지가 있습니다.

The second one, however, is the Thing, it's the Big Thing that everyone wants to know about. In fact, let's call it the ListPages Thing. LPT for short. Here's an example page that uses LPT.
두번째는 이게 바로 그 기능입니다. 모두가 어떻게 하는지 알고 싶어하는 것이죠. 그럼 이걸 이제 ListPages 기능이라고 합시다. 줄이면 LPT고요. 여기 LPT의 사용 예가 있습니다..

But the first one, Listing Pages, is way easier to explain, so I'll be using that to cover a lot of the things you need to know for the second one, the ListPages Thing (LPT).
하지만 첫번째 리스팅 페이지는 설명하기 쉬운 이기에, 당신이 원하는 두번째 기능을 위해 더 많은 시간을 들일 것입니다. ListPages 기능(LPT)이요.


Try to limit yourself to just one ListPages module per page.
페이지 당 하나의 ListPages 모듈만 사용하도록 하시는 걸 추천합니다.

ListPages modules can really slow down how fast a page loads. My author page had about thirty on it at one point, and I swear it was taking at least a full minute to load sometimes. It was godawful. Don't do that.
ListPages 모듈은 엄청 페이지 로딩을 느리게 할 수 있습니다. 제 작가 페이지엔 30개 정도 있었던 적이 있는데 가끔 1분씩 걸리곤 했습니다. 경악스럽죠. 하지 마세요.


Without further ado, let's discuss the first implementation of ListPages: the simple listing of pages.
그럼 곧장 ListPages의 첫번째 구현을 논해봅시다. 간단하게 페이지를 리스트로 나타냅시다.

Here's a list of my 5 worst-rated pages on the wiki.
여기 위키 내의 제 최저 평점 5개의 리스트가 있습니다.

If you think I just typed out the URLs of each of them and left it at that, think again. You're seeing ListPages magic. If you want, you can prove it by heading to one of those pages, upvoting it (please :'( ) and then refreshing this page. You'll see that the rating, as recorded here, will change as well.
그냥 제가 각 페이지 URL를 입력해둔 거라고 생각하신다면, 다시 생각해보시죠. ListPages 마술을 보고 계십니다. 원한다면, 저 페이지 중 하나에 들어가서 추천하고 (부탁드립니다 :'() 돌아와서 새로고침하는 걸로 증명하실 수 있습니다. 평점을 보시면 마찬가지로 변했을 겁니다.

If you check the source of this page you'll see the following code:
이 페이지의 소스를 보시면 이런 코드를 보실 수 있을 겁니다.

[[module ListPages created_by="Croquembouche" order="rating" limit="5" separate="no"]]
* %%title_linked%% (+%%rating%%)

Don't have a clue what any of that means? That's fine — that's what this guide is for.
뭔 소린지 모르겠다고요? 괜찮습니다. 그게 이 가이드가 존재하는 이유입니다.

If I wanted to, I could show my top 5 pages. Or I could show more than 5. Or I could show only pages created after a certain date. There's a whole bunch of parameters that the ListPages module accepts in order to do what you want.
원한다면, 제 최고 평점 5 페이지를 보일 수도 있습니다. 아니면 5개보다 적게 보여 줄 수도. 아니면 특정 날짜 이후에 만들어진 페이지만 보여 줄 수도 있죠. 당신이 원하는 것을 위한 많은 무더기의 ListPages 모듈에 쓸 수 있는 인자들이 있습니다.

I'm going to take you through basic ListPages use in three steps:

  1. Selecting the pages you want;
  2. Modifying how the list handles those pages,
  3. Actually displaying the list.

기본 ListPages 사용법을 3단계로 설명하죠.

  1. 원하는 페이지를 고른다.
  2. 리스트가 페이지를 어떻게 다룰지 수정한다.
  3. 실제로 리스트가 나온다.

2.1: SELECTING PAGES FOR THE LIST리스트를 위해 페이지 고르기

If you don't specify any parameters, ListPages will attempt to list every single page on the wiki. You don't want that (right?) which is why we specify selectors. These tell ListPages which pages to select and which ones to avoid.
당신이 어떤 인자도 지정하지 않으면, ListPages는 위키의 모든 페이지를 나열하려고 하겠죠. 당신은 그런건 원하지 않으실테고 (맞죠?) 그게 선택자를 지정해야하는 이유죠. 이것들은 ListPages에게 어떤 페이지를 고르고 어떤 페이지를 피할지 말해줍니다.

Let's work through the selectors to find out what each one does.
각각의 선택자들이 무엇을 하는지 알아보죠.

ListPages has a whole bunch of selectors you can choose so that you can tell it exactly what pages to select. Here are the ones that you'll find most useful:
ListPages는 수많은 선택자들을 가지고 있어서 정확히 어떤 페이지를 선택할지 ListPages에게 말해줄 수 있습니다. 여가 가장 자주 유용하게 쓸 것들이 있습니다.

  • created_by — filter by author's name. If you set this to "Croquembouche", ListPages will only show pages created by me and will ignore all others. Please note that this only selects the user who actually posted that page to the wiki! ListPages is blind to co-authorship and collaborations.
  • created_by 작가의 이름으로 구별합니다. 만약 이걸 "Croquembouche"로 설정하면, ListPages는 제가 만든 페이지만 보여주고 나머지는 전부 무시할겁니다. 이 방법은 오직 위키에 실제로 올린 사람만 선택한다는 점을 유의하세요! ListPages는 공동작성자나 공동기여자는 볼 수 없답니다.
  • rating — filter by rating. If you set this to ">20" you'll only see pages with a rating that's greater than 20. Set it to "=0" and you'll only see pages with a rating of 0.
  • rating — 평점으로 구별합니다. 만약 이걸 ">20"으로 설정하면 평점이 20점보다 높은 페이지만 볼 수 있을 겁니다. "=0"으로 설정하면 평점이 0인 페이지만 볼 수 있을 겁니다.
  • tags — filter by tags. If the tag name starts with "+", ListPages only shows pages with that tag. If it starts with "-", ListPages only shows pages without that tag. For example, "+scp -keter" would list all pages with the "scp" tag but without the "keter" tag.
  • tags — 태그로 구별합니다. "+"로 시작하는 태그가 있다면, ListPages는 그 태그가 있는 페이지만 보여줍니다. "-"로 시작한다면 ListPages는 그 태그가 없는 페이지만 보여줍니다. 예를 들어, "+scp -케테르"면 모든 페이지 중 "scp" 태그가 있지만 "케테르" 태그는 없는 페이지만 보여줍니다.
  • created_at — filter by the date on which each page was created. This selector accepts a fair range of values. "2009" will select all pages made in 2009, while "2009.02" will select all pages created in February 2009. ">2009.02" will select all pages created after February 2009. "last 3 month" will select all pages created in the last 3 months.
  • created_at — 각 페이지가 업로드된 날짜로 구별합니다. 이 선택자는 fair range of values를 받습니다. "2009"는 2009년에 만들어진 모든 페이지를 선택합니다. 하지만 "2009.02"는 2009년 2월에 만들어진 모든 페이지를 선택합니다. ">2009.02"는 2009년 2월을 초과해서 만들어진 모든 페이지를 선택합니다. "last 3 month"는 최근 3달 이내에 만들어진 페이지를 선택합니다.
  • name — filter by page name, or rather, the page URL. "SCP-3000" will match the page for SCP-3000. Use a percent symbol to denote "pages starting with this" — for example, "SCP-%" will match all pages starting with "SCP-".
  • name — 각 페이지의 이름, 아니면 페이지의 URL로 구별합니다. "SCP-3000"는 SCP-3000 페이지를 고릅니다. 퍼센트 기호를 이용해 "이것으로 시작하는 페이지"라고 나타냅니다. — 예를 들어, "SCP-%"는 "SCP-"로 시작하는 모든 페이지를 고릅니다.
  • category — filter by page category. By default, ListPages will only look at pages in the same category as the current page. For this page, the category is "_default". For page-tags, the category is "system", and for earthworm, the category is "component". Check the URL — everything before the colon is the category, and if there's no colon, it's "_default". The category selector lets you specify a different category. Set it to "*" for all categories.
  • category — 페이지의 카테고리로 구별합니다. 기본적으로, ListPages는 현재 페이지와 같은 카테고리의 페이지만 보여줍니다. 이 페이지의 경우, 카테고리는 "_default"입니다. page-tags는 카테고리가 "system"이고, earthworm는 카테고리가 "component"입니다. URL를 확인해보시면, 콜론(:) 뒤에 있는 모든 건 카테고리이고, 콜론이 없다면, 그 페이지는 "_default"입니다. category 선택자는 다른 카테고리를 특정할 수 있도록 합니다. "*"로 설정하면 모든 카테고리로 설정됩니다.

In summary: each selector will match certain pages and ignore others. For a page to appear in the list, it must match all of your selectors.
요약: 각각의 선택자는 특정 페이지를 고르고 나머지는 무시합니다. 리스트에 어떤 페이지가 나타나기 위해선, 당신의 선택자 전부와 맞아야 합니다.

The documentation goes into more detail on each of these selectors — and a few others! — under the "Selecting Pages" title.
이 문서의 "Selecting Pages"에서 각각의 선택자에 대해서 좀 더 자세한 사항을 알 수 있습니다. 다른 선택자도 몇개 더 있고요!


Just selecting different pages isn't everything we need to do — we also need to specify how those pages are going to be displayed.
그냥 다른 페이지를 고르는 게 우리가 필요한 전부는 아니죠. — 페이지가 어떻게 표시될지도 명시해야합니다.

There are a couple more parameters that you need to know. These aren't selectors, so they're not listed in the section above, but they're used in exactly the same way.
당신이 알아둬야할 인자가 몇 개 더 있습니다. 선택자는 아니고, 그래서 위에 나열되지 않았지만, 똑같은 방식으로 이용합니다.

  • limit — determines how many pages to show. If you set this to "5", then no more than 5 pages will be shown.
  • limit — 페이지가 몇 개나 보여질지 결정합니다. "5"로 설정하면, 5개 이하의 페이지가 보여집니다.
  • perPage — how many pages should be shown per page of the list? (It's not as confusing as it sounds!) By default, this value is set to 20, so if there are more than 20 pages in the list, a new page will be created. You can see this effect on Top Rated Pages This Month — at the bottom of the list of SCPs (assuming it's more than about a week into the month). The maximum value is 250.
  • perPage — 목록의 페이지당 표시될 페이지의 수? (보기 보다 간단하답니다!) 기본적으로 이 값은 20으로 설정되고, 그래서 목록이 20 페이지 이상이라면, 새로운 페이지가 생성됩니다. Top Rated Pages This Month에서 확인해보세요. — SCP들 목록 하단에 있습니다. 새로운 달이 되고 일주일 정도 지났다고 가정한겁니다.) 최대값은 250입니다.
  • separate — whether or not each entry in the list should be by itself in its own little list, or all in the same list. Valid values are "yes" or "no" — if you say "yes", you'll end up with a big gap between each entry in the list, which is rarely what you want.
  • separate — 목록의 각 항목이 자체적인 작은 목록에 포함될지, 전부 같은 목록에 포함될지를 정합니다. 유효한 값은 "yes"나 "no"입니다. — 만약 "yes"로 하면, 각 목록의 항목 사이에 큰 간격이 생기는데, 이걸 원하는 일은 별로 없을겁니다.
  • order — 목록을 정렬하는 방법.

There's a lot of different options that the "order" parameter accepts, and they're listed in the documentation under the "Ordering Pages" heading. I'll list a few of the more useful ones here.
"order" 인자가 받는 다양한 설정이 있고, 문서의 "Ordering Pages" 아래에 나열되어 있습니다. 전 더 유용한 것 몇 개만 나열해보겠습니다.

  • order="rating" — order by rating.
  • order="rating" — 평점으로 나열.
  • order="name" — order alphabetically by page name (as specified in the URL).
  • order="name" — 페이지 이름에 따라 알파벳 순으로 나열 (URL에서 지정된 대로).
  • order="title" — order alphabetically by page title (the actual title of the page).
  • order="title" — 페이지 제목에 따라 알파벳 순으로 나열 (페이지의 실제 제목 대로).
  • order="created_at" — order by the date on which the page was created.
  • order="created_at" — 페이지가 만들어진 날짜 순으로 나열.
  • order="comments" — order by number of comments.
  • order="comments" — 코멘트의 수에 따라 나열.
  • order="random" — everything is in a random order! Re-randomises once per minute.
  • order="random" — 전부 무작위로 나열! 1분마다 다시 무작위 정렬됩니다.

By default, everything is ordered in ascending order (so low numbers are shown first). To show them in descending order, append 'desc' to the end — e.g. order="rating desc".
기본적으로, 모두 오름차순으로 나열됩니다 (낮은 숫자가 먼저 표시됩니다). 내림차순으로 표시하려면, 끝네 'desc'를 붙여주세요 — 예시 order="rating desc".

Note that there's no special option to specifically sort things in ascending order. The correct way to do it is to append "desc desc". Does that make sense? Nope. Can we really expect any better from Wikidot? Nope.
뭔가를 오름차순으로 분류하는 특별한 방법이 없다는 것에 주의하세요. 그러기 위한 정확한 방법은 "desc desc"를 붙이는 겁니다. 말이 되냐고요? 안됩니다.. 위키닷에게 뭔가 더 좋은 방법은 없냐고요? 없습니다.


Okay so now that we know all about how to select the exact pages we want, and how to modify the parameters of that list. We've got a list of pages.
좋아요 이제 저희는 정확히 원하는 페이지를 선택하고 리스트의 인자를 수정하는 법을 익혔습니다. 페이지의 리스트를 가지고 있게습니다.

When it comes to displaying that list, you've got a lot of options. Within the body of the module — that is, between [[module]] and [[/module]]@@ — there are a number of different content markers you can put.

Each content marker is like a stamp. We'll take %%title%% for example, which represents the title of the page. Imagine it like this: the ListPages module has a list of titles. It stamps the first title onto the page, then it moves down, changes to the next title, and stamps that. And so on, through the list. You end up with a list of page titles.

Here are some of the most useful content markers. As usual, the documentation has the full list, under the heading "Sections head/body/foot". And there are a lot, so be sure to take a look.

  • %%title%% — represents the title of the page.
  • %%title_linked%% — represents the title of the page, with a clickable link
  • %%created_by%% — represents the author of the page.
  • %%created_at%% — represents the date on which the page was created.
  • %%rating%% — represents the rating of the page.
  • %%index%% — represents the position of the page in the list
  • %%content%% — represents the entire content of the page. We'll be coming back to this one later.

Seriously, I've listed 7 here, there are 56 in total — but some of them are so obscure that you'd never use them.

Please note

ListPages cannot display the actual title of your SCP. For example if you wanted to list SCP-173, you can't have ListPages display "The Sculpture".

This is because SCP titles are only kept on the SCP series pages, not on the SCP pages themselves. Therefore that information is inaccessible to ListPages, which only lists basic information about the selected pages and doesn't go looking on other pages for information about them.

So now that we know a lot of parameters, let's do a demonstration.

I'm going to list…

  • All pages created in the past three months…
    • created_at="last 3 month"
  • …with a title beginning with the letter "S"…
    • name="S%"
  • …that have a rating of less than 100…
    • rating="<100"
  • …and that are not tagged "scp".
    • tags="-scp"
  • I want to show no more than 40 results…
    • limit="40"
  • …and I want to show 10 results per page…
    • perPage="10"
  • …and I want all of these to appear in the same list instead of in separate lists…
    • separate="no"
  • …and I want them to be ordered by rating, in descending order.
    • order="rating desc"
  • I want these pages to be in a numbered list…
  • …followed by the date on which the page was created…
    • %%created_at%%
  • …followed by the page title with a link to the page…
    • %%title_linked%%
  • …followed by the author's name…
    • by %%created_by%%
  • …followed by the page rating, in parentheses.
    • (%%rating%%)

So I write the following ListPages module:

[[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%%)

…which outputs the following list:

  1. 07 Jun 2019 01:33 SCP-507-KO_실험기록 by LogueX (0)
  2. 02 Jun 2019 10:46 SCP-ABCD-KO by WinterFlower1 (0)
  3. 27 May 2019 12:15 SCP-875-KO by sony3143 (0)
  4. 26 May 2019 01:30 SCP-569-KO by Hubiil (0)
  5. 24 May 2019 22:56 SCP-737-KO by kimsiwan (0)
  6. 24 May 2019 13:29 Nicehan's propocal "Experiment" by nicehan (0)
  7. 24 May 2019 07:52 Singu1arity by Singu1arity (0)
  8. 30 Apr 2019 09:23 scp-730-ko by speedhigh (0)
  9. 25 Apr 2019 08:54 Nicehan's proposal 8 by nicehan (0)
  10. 22 Apr 2019 10:03 scp-not by scp-not (0)
페이지 1 의 3123다음 »

Is this a very useful list? No. But it's a great example.

Cool. If you were following along in a sandbox, congratulations, you've just made a ListPages module. If you weren't, congratulations anyway, but less.

Note: If you decide to make a ListPages module in the sandbox, be aware that you're going to see pages from the sandbox, not from the main wiki! It catches me off-guard every single time.

Homework: Pop along to Most Recently Created, hit Options then Page Source at the bottom, see if you can find the ListPages module, and then see if you know what each bit does. If you see stuff I've not covered, make sure you have the documentation to hand!

Please also note that the content section of your ListPages module doesn't have to be one line long. It can be as many lines as you need it to be.

If you do have more than one line, I recommend you set separate="yes", or it might look a bit confusing.

Now that I've covered the basics of ListPages, it's time to move on to its most well-known application.


This is where things get tricky.

SCP-2998 followed by SCP-1893 and SCP-1173 are the pages that are most known for doing the ListPages Thing, and are certainly responsible for its popularity these days. All three were written by EskobarEskobar, who was himself taught by AelannaAelanna, so you have them to thank for that.

Since then, many pages also do the ListPages Thing. SCP-2111, SCP-3002, SCP-3939, SCP-3449, my author page, SCP-3020, Jim North's Proposal, and many more also do it.
If your page also does the ListPages Thing, leave a comment to let everyone know!

I think 3939 wore it best. But I might be a little biased.

From now on I'll be abbreviating the ListPages Thing to LPT.

BE WARNED! Using LPT comes at a heavy cost: your reader will expect you to really justify why you've used it. LPT should be reserved for heavier articles that really need LPT to make their concepts and/or format screws work. LPT isn't suitable for SCP-AVGJOE.


LPT is when an SCP (or any page) appears to have multiple pages but keeps the same Rating Module throughout. LPT can be easily identified by checking the URL after clicking a link on the page — if it ends in "/offset/X", where X is a number, it's LPT. Most (but not all!) applications of LPT can be identified in this way.

More broadly, it's when any page on the wiki changes in content as a result of either refreshing or clicking a link.

There are some exceptions to this rule — SCP-2786 and SCP-3211 are not LPT, because they use [[html]] instead of [[module ListPages]]. [[html]] can be identified by part of the page taking a few seconds longer than the rest of the page to load, and also by the fact that changes happen instantly.

LPT changes, unlike [[html]], can only happen when the page is refreshed or when the user navigates to a /offset/ URL.

SCP-3340 makes this extra confusing, because it's powered by [[html]] (not ListPages), and yet its changes only happen when the page is refreshed.

So, in summary:

Both LPT and [[html]] are techniques for making the content of a page appear to change.

LPT is powered by ListPages. [[html]] is powered by HTML, CSS and often JavaScript.

Changes as a result of [[html]] can happen instantly and can be almost anything, but they can only affect things within the [[html]] block that's already on the page.

Changes as a result of LPT affect the entire page, but they can only occur when the user clicks on a link to an offset page or refreshes the page.

LPT is easy to learn. [[html]] is more complicated.


According to the documentation, the ListPages module and [[html]] do not play nicely together! You can't use [[html]] in any LPT child pages — it just won't work. Blame Wikidot.

You get to use one or the other, not both (although an article can contain both LPT and [[html]] so long as they're independent of each other). Choose which is best for your article and/or which is best for your skillset.


LPT is simply a very specific application of the standard Listing Pages technique.

Here's the usual ListPages module. Take note of the specific parameters we're using here.

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

There's a couple of new terms here, so I'll go over them now.

  • category="fragment" — selects pages from the "fragment" category. Pages in the "fragment" category don't show up in Top Rated Pages This Month or in Recently Created Pages. This makes them useful for creating child pages, which we'll cover in a bit. They're not completely undetectable, though.
  • parent="." — the parent selector matches pages whose parent is the same as this parameter's value. parent="." matches pages whose parent is the current page. To set a page's parent, hit Options at the bottom, then Parent, then type in the name of the page that you'd like this page to be the child of.
  • order="created_at" — you should know what this does — it orders pages by their date of creation. SCP-1893 actually orders its pages randomly.
  • limit="1" — this limits the number of pages that ListPages can select to 1. Just one page.
  • %%content%% — this placeholder means that, instead of just getting a small bit of info like the page title or its rating, ListPages will just dump the entire content of the selected page into the current page. Including CSS modules.
  • offset="@URL|0" — this one's a little trickier to explain, so I'm going to do it in pictures.


So say we have our SCP that we've just written. The green box below represents this brand new SCP page.


Now let's place a ListPages module in it. This is represented by the big hole (which will later be filled with %%content%%).


Now let's create two child pages. These pages are what are going to fill the hole in the parent page.

I'll be detailing what exactly child pages are and how to make them in a bit, but for now, I'll represent them with these ugly salmon boxes:


So those two child pages (salmon) are children of the parent page (green).

On the parent page, we'll write our ListPages module to select and display the content of those two child pages:

[[module ListPages parent="."]]

Which gives us the following parent page:


We've got a problem already: the parent page is now displaying the content of both child pages. Because, by default, ListPages lists as many pages as it possibly can.

So, we set limit to 1, to force ListPages to show only one page:

[[module ListPages parent="." limit="1"]]

Which gives us the following:


Great! We now have a ListPages module that's showing only one child page's content, and there's another child page ready and waiting to show its content when the reader has finished reading.

So how do we actually show the second child page?

We've already established that making the parent page "wider" — i.e. making it show both child pages — won't work, because then the reader will still be able to see the first child page.

So we just move the parent page along to the right.

[[module ListPages parent="." limit="1" offset="1"]]

We do this using the offset parameter. offset is most easily imagined as the distance from the start of the list to the child page that you want to show.


The default value of offset is "0", meaning it will show the first child page in the list. You can change this manually if you want, but why would you want to do that?

offset="@URL" means that instead of the offset value being a predetermined number, it's set by the URL. If you're on a page that ends in "/offset/X", that means that the URL has set the offset value of the ListPages module on that page. For example,

This makes it possible to change the offset via giving the reader a URL to the next page. SCP-2998 does this by having a link at the bottom of each child page. SCP-3939 does this by giving the reader multiple links at the bottom of each child page.

offset="@URL|0" sets the offset according to the URL, but if the URL doesn't specify an offset — for example when the reader loads the page for the first time — this sets it to 0. It can be set to anything you want — "@URL|21" is a valid value — but 0 is normally easiest to work with. It just depends on what order your child pages are in, and which one you want to be seen first.

SCP-1893 doesn't give the reader any links. Instead, the pages are ordered randomly using order="random". The offset value remains at its default values — 0 — so whenever the order changes, the first page in the list is displayed (i.e. a random page).

  • Note about order="random": The order of pages when using order="random" updates once every minute. Good news: it re-randomises all by itself, and you don't have to do anything. Bad news: It won't re-randomise any sooner. Refreshing the page over and over won't get you anywhere — you'll still have to wait for a whole minute.


As established above, LPT requires there to be a parent page and several child pages.

It's usually a good idea to create the parent page last because it'll take a while to create all of your child pages, so I'll detail how to create those first. Ideally you'll be creating and testing every page on the sandbox anyway, so hopefully, it shouldn't matter too much, but better safe than sorry.

The child pages are what hold the content of your LPT.

I'll be using SCP-3939 as an example.

The ListPages module has offset="@URL|0", so the main page is the same as SCP-3939/offset/0.

The child page that this is pointing to is fragment:SCP-3939-0. Take a look at the sources of the child page and the parent page and play a game of spot-the-difference between them.

You should notice three things:

  1. The child page contains all of the content that isn't already on the parent page.
  2. The child page contains the links that take the reader to different offsets.
  3. The parent page has the rating module and all the CSS formatting — i.e. anything that needs to be on all pages.

Regarding number 3, you can have things that need to be on all pages in the child if you want, but it's easier on you if it's on the parent. If you need to change something, you only need to change it once on the parent, instead of many times for each child.

Note that in the case of SCP-3939, the image is on each child instead of on the parent because there's a single page on which the image isn't supposed to appear. If it was on the parent, then that image would be forced to appear on all pages.
If you're going to do this, please only upload the image to one page!

You'll usually be putting almost all of your content on the child pages, but you don't have to! Check SCP-3306 for an example of LPT where the ListPages module is only at the bottom of the page, and only changes the ending.

To create a child page, create a new page on the wiki called "fragment:something", where "something" is whatever you like.

It's super important that the URL begins with "fragment:". Fragment pages don't appear in Top Rated Pages This Month, Recently Created Pages, or Most Recently Edited (although they do appear on Recent Changes). Also, neither jarvis nor scpper counts votes from fragment pages towards your vote total/average, so they won't affect anything.

The "something" can be whatever you like, though I personally recommend naming them the same as your SCP while also numbering them along with the offset. So for SCP-XXXX, that'd be fragment:SCP-XXXX-0, fragment:SCP-XXXX-1, fragment:SCP-XXXX-2, and so on.

Repeat this for each of your child pages.

Make sure you create the child pages in the right order! In this guide, I'll be recommending ordering pages by the time of their creation using order="created_at". You can put them in any order you like, but if you're ordering by date/time, make sure you create them in the right order.

Make sure your child pages contain offset links so your reader can navigate easily to the next offset!

The next step is to set your parent page as the parent of your child pages. Hit Options at the bottom of each child page, then Parent, then type in the name of your parent page (the URL, that is — not the page title!). Once you've typed a few letters your parent page should appear automatically.

If you haven't created your parent page yet, it won't appear in the list. Don't worry — just do it after you've created the parent page.


Now that we have our child pages, we need the parent page. The parent page is the green-coloured lens through which the reader will see the salmon-coloured child pages, one by one.

All you need to do is create a new page — a normal one this time, not in the "fragment:" category — and slap a ListPages module on it.

The ListPages module I recommend is:

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

This is the same module from Section 3.2: "How Does LPT Work?" from above, and each term is explained up there.

The only term you may want to change is order. I always recommend creating your child pages in the order in which you want them to appear, and then order by "created_at". However, if you've followed my advice on how to name your child pages, then you should also be able to order by "name" or "title". You could even follow in SCP-1893's footsteps and order by "random" if you like.

On the sandbox, the parent page has to be in the "collab: category. Make sure the URL starts with "collab:".
ListPages by default looks for pages in the same category as the parent page, so if you choose to omit the "category" selector in the sandbox, all of your child pages will have to be in the "collab:" category, too.

If you've not already done so, set this page as the parent of the child pages.

On the sandbox, you won't be able to do this unless the parent page's URL starts with "collab:". If you missed this step, no worries — hit Options at the bottom of the parent page, then Rename, then stick "collab:" at the front of the page's name. This step isn't needed for the main wiki.

Hold on there, Croquembouche!

"Why are you using these specific selectors?" you ask me. parent="." and order="created_at" are nice and all, but what's stopping me from using whatever selectors I want?"

And to that I say: nothing at all. You can use whatever selectors you like to select your child pages.

But here's the thing: let's say you create a load of pages called fragment:SCP-XXXX-0 to fragment:SCP-XXXX-10. You order them using order="name" and select them using category="fragment" and name="SCP-XXXX-%". And it works! Perfect.

But then there's nothing stopping someone from injecting pages into the middle of that, if they were so inclined. If someone then went and created fragment:SCP-XXXX-0a, without your knowledge, it'd appear in the list between 0 and 1 and your whole offset chain would be ruined.

Malicious people can't inject pages into the middle of order="created_at" without literally travelling back in time. In fact, it's even more secure if you also include created_by="Your Username". Unless you're writing something collaborative, there's no reason not to.

And parent="." is just nice because it automatically leaves a link at the top of your child pages that points to the parent page. Super helpful for lost people who don't know how they got there.

Also, if you want to be really nice, make sure you leave a list of the child pages somewhere. Super convenient for future translators, and super convenient for nosy people like me who want to see how you did it.

And of course, leave a comment on this page once your LPT SCP is posted!


Okay. You're done. You know all the basic stuff about Listing Pages and about doing the ListPages Thing.

Still though, act with caution: you now wield great, terrible power; the power of ListPages. Use it wisely, use it responsibly, and most important: use it sparingly. ListPages format screws are amazing when they're done well. When they're done poorly, every page that uses ListPages also suffers.

Get criticism on the forums, but more importantly get your idea checked before you even start writing. There's nothing worse than pouring this much effort into an idea that just doesn't deserve it.

And of course, there's uses for ListPages beyond the 2 or 3 extremely specific use cases detailed here.

Use a series of random ListPages to make a modular article that's completely different every time you read it. Use a ListPages along with [[tabview]] to have separate footnotes for each tab.

Do something no one has ever done before. That's the best way to wield this power.

If you have any leftover questions, please, ask them in the discussion, and I'll make sure that they're answered.

Thank you for tuning in.