Magie ListPages a tvoje maličkost
hodnocení: +2+x
blank.png

Všude se nám nějak moc objevuje slovo "ListPages".

Po měsíce jsem meditoval v pralesích a upřel tok mých myšlenek právě na slovo "ListPages" a má mysl se povznesla na úroveň daleko za nejhlubší sny a tužby. Možná, že víš, co "ListPages" je, můžeš i vědět, co to znamená… ale jsem cítil samotnou esenci ListPages, jak prostupuje celým mým tělem. jsem pocítil jeho éterickou formu, jak se podvolila mé vůli.

Podrobil jsem si pátý element, ListPages, a v tomto návodu — jež by měl být brán jako rozšíření k Advanced Formatting and You od DrMagnusDrMagnuse — se pokusím předat ti tyto znalosti.



Prosím, ber na vědomí, že jsem v tomto návodu přidal ke každému příkladu modulu ListPages šedé pozadí, hlavně aby se daly od zbytku stránky jednoduše odlišit. Tvé moduly budou mít pozadí průhledné.

Ale počkej, Croquembouchi!

"Já nepotřebuju vědět, jak vytvořit modul ListPages od úplných základů!" říkáš. "Stačí mi jenom vědět, jak udělat tamtu věc s ListPages, která je kromě dalších použitá třeba u SCP-2998, SCP-2111 a SCP-3002."

A na to ti já říkám: "Ne, je důležité znát i ty základy. Je samozřejmě v pořádku zkopírovat odněkud kód a vložit ho k sobě, ale pokud se něco pokazí a ty nebudeš chápat proč, jak to opravíš?"

Ale pokud opravdu tohle všechno znáš (nebo chceš předstírat, že to znáš), fajn, sjeď si dolů k Rounderhousově Sekci 5: Rychle a zběsile. Ale pak neříkej, že jsem tě nevaroval.


1: CO JE TO LISTPAGES?


ListPages je jeden z modulů na Wikidotu. Kompletní dokumentaci můžeš najít zde.

Abych tedy citoval tuto dokumentaci:

Modul ListPages je univerzální, všemi používaný nástroj, který vybírá a zobrazuje určité stránky na wiki.

V základu dělá to, že to vysloveně vytváří seznam (List), do kterého následně vkládá stránky (Pages).

ListPages má povětšinou na SCP wiki dvě využití:

  1. Vytřídit z veškerých stránek jen určitou skupinu stránek a tu pak zobrazit v seznamu.
  2. Umožnit, aby se SCP (nebo jiná stránka) mohlo skládat z několika různých stránek, kterými můžete procházet, jak je libo, avšak budou mít společný Rating modul.

První bod je to "užitečné, ale nudné". Budeme tomu říkat "seznamy stránek", protože právě to to ve skutečnosti je. Toto je příklad takového ListPages modulu, který dává stránky do seznamu..

Avšak ten druhý, to je to pravé ořechové, to je ta Velká Věc, kterou chce každý umět. Vlastně pojďme tomu říkat ListPages Věcička. Zkráceně LPV. Tady je příklad, který využívá LPV.

Avšak to první, seznamy stránek, je mnohem jednodušší na vysvětlení, takže to využiji, abych pokryl spoustu informací, které musíš znát, abys mohl dělat to druhé, ListPages Věcičku (LPV).

Varování

Zkus se omezit na pouze jeden modul ListPages na stránku.

Moduly ListPages mohou opravdu zpomalit načítání tvé stránky. Má autorská stránka jich měla jednu dobu asi třicet a přísahám, že občas to trvalo celou minutu, než se stránka plně načetla. Bylo to vážně strašné. Raději to nedělejte.


2: SEZNAMY STRÁNEK


Ale už přestanu chodit okolo horké kaše. Probereme si první implementaci ListPages: prosté seznamy stránek.
Zde je seznam 5 nejnovějších stránek na české wiki.

Pokud si myslíš, že jsem tam ty odkazy prostě jen tak vypsal, budu tě muset zklamat. Právě jsi svědkem kouzla ListPages. Jestli mi nevěříš, můžeš sám zamířit na jednu z těchto stránek a ohodnotit ji (upřímně!). Pak tuto stránku obnov. Sám uvidíš, že se výše uvedené hodnocení také změní.

Pokud nahlédneš do zdrojového kódu, uvidíš namísto seznamu následující kód:

[[module ListPages category="*" order="created_at desc" limit="5" separate="no"]]
* %%title_linked%% (%%created_at%%) (%%created_by%%)\ (+%%rating%%)
[[/module]]

Nemáš nejmenší tušení, co cokoliv z toho znamená? To je v pořádku — kvůli tomu existuje tento návod.

Pokud bych chtěl, mohl bych sem dát seznam pěti nejlépe hodnocených stránek na wiki. Nebo i víc než 5. Nebo by se mohly ukázat pouze stránky vytvořené po určitém datu. Je tu spousta parametrů, které lze do ListPages modulu zadat, aby ukazoval přesně to, co chceš.

Chystám se tě provést skrz základy ListPages ve třech krocích:

  1. Vybírání stránek, které chceš zobrazit
  2. Upravování toho, jak by se měly stránky zobrazovat
  3. Samotné zobrazení seznamu


2.1: VYBÍRÁNÍ STRÁNEK PRO SEZNAM


Pokud nespecifikuješ žádné parametry, ListPages se pokusí dát do seznamu každou stránku na wiki. To nechceš (že ne?), a proto specifikujeme selektory. Ty pak ListPages říkají, které stránky má vybrat a kterým se má vyhnout.

Pojďme si projít jednotlivé selektory a ukázat si, co který dělá.

Selektor se skládá ze dvou částí. Například u created_by="Croquembouche" je created_by= první část a "Croquembouche" část druhá. První část specifikuje, o jaký selektor se jedná (samotné selektory jsou vypsány níže). Druhá část pak udává hodnotu onoho selektoru. Hodnota může být u každého selektoru zcela jiná; může se jednat o datum, jméno uživatele, číslo či nějaký štítek. Jediné, co mají všechny hodnoty společné, jsou uvozovky (""), mezi kterými je vždy hodnota vepsána.

ListPages má kupu selektorů, ze kterých můžeš vybírat, abys mohl nejlépe specifikovat, jaké stránky má modul vybírat. Zde najdeš ty nejužitečnější:

  • created_by — filtruje stránky podle autora. Pokud bys hodnotu tohoto selektoru nastavil na "Croquembouche", ListPages by zobrazil pouze stránky, které jsem vytvořil a ignoroval by stránky vytvořené všemi ostatními. Prosím, měj na paměti, že tento selektor vybere pouze stránky, které určitý uživatel na wiki vytvořil! ListPages nevidí, jestli byla nějaká stránka výsledkem spolupráce a vnímá jako autora pouze toho, kdo stránku vytvořil. Do hodnoty je možné zadat jméno jakéhokoliv uživatele Wikidotu.
  • rating — filtruje stránky podle hodnocení. Do hodnoty je možné zadat jakékoliv celé číslo, kterému musí vždy1 předcházet jeden ze znaků: ">X" - zobrazí stránky s hodnocením větším než X, "<X" - zobrazí stránky s hodnocením menším než X, "=X" - zobrazí stránky s hodnocením rovným X. Pokud bys tento selektor nastavil na ">20", zobrazil by modul pouze stránky s hodnocením vyšším než 20. S nastavenou hodnotou "=0" se v seznamu zobrazí pouze stránky s hodnocením 0.
  • tags — filtruje stránky podle štítků. Pokud je před názvem štítku "+", zobrazí modul pouze stránky s tímto štítkem. Pokud je před názvem štítku "-", zobrazí modul pouze stránky, které nemají tento štítek. Pokud do hodnoty zadáš několik štítků, které před názvem nebudou mít nic, modul přidá do seznamu všechny stránky, které mají alespoň jeden ze zadaných štítků. Napřklad hodnota "+scp -keter humanoid světlo" ukáže všechny stránky se štítkem "scp", které zároveň nemají štítek "keter" a k tomu mají buď štítek "humanoid", nebo "světlo", nebo oba.
  • created_at — filtruje stránky podle data, kdy byly vytvořeny. Tento selektor je schopný pobrat docela širokou škálu různých hodnot. "2019" vybere všechny stránky, které byly vytovořeny v roce 2019, zatímco "2019.02" vybere všechny stránky, které byly vytvořeny v únoru roku 2019. ">2019.02" vybere všechny stránky vytvořené po únoru roku 2019. "last 3 month" vybere všechny stránky vytvořené během posledních 3 měsíců. Do hodnoty tedy můžeš zapsat jakýkoliv rok, popřípadě i rok s měsícem, nebo "last X hours/day/week/month".
  • name — filtruje stránky podle jejich názvu, nebo spíše podle jejich URL. "SCP-3000" dá do seznamu stránku SCP-3000. Můžeš ale použít symbol procenta, abys naznačil, že má URL vybraných stránek začínat na to, co je před procentem — například "SCP-%" vybere všechny stránky začínající na "SCP-".
  • category — filtruje stránky podle kategorie. Ze základu hledá ListPages mezi stránkami v kategorii, do které spadá stránka, v níž se modul nachází. Tato stránka spadá do kategorie "_default". Stránka page-tags spadá do kategorie "system" a earthworm pak spadá do kategorie "component". Podívej se do URL — vše před dvojtečkou je kategorie a pokud tam žádná dvojtečka není, kategorie je "_default". Selektor category ti umožní vybrat i stránku z jiné kategorie. Do hodnoty je tedy možné zapsat název jakékoliv kategorie. Pokud před název přidáš -, modul nebude vybírat stránky z této kategorie. A pokud hodnotu nastavíš na "*", bude modul vybírat ze všech kategorií

Abych to tedy shrnul: každý selektor vybere jen určité stránky a bude ignorovat všechny ostatní. Aby se mohla nějaká stránka zobrazit v seznamu, musí splňovat podmínky všech selektorů.

Kompletní dokumentace zachází u každého selektoru — a několika dalších selektorů — do mnohem větších detailů.


2.2: UPRAVOVÁNÍ SEZNAMU


Ale pouhé vybírání stránek nám nebude stačit — potřebujeme také určit, jak budou tyto stránky zobrazeny.

Je tu pár dalších parametrů, které musíš znát. Tohle nejsou selektory, proto nejsou v seznamu výše, ale používají se prakticky úplně stejně.

  • limit — určuje, kolik stránek se zobrazí. Pokud do hodnoty napíšeš "5", nebude v seznamu více jak 5 stránek. Když tento parametr neuvedeš, zobrazí se všechny stránky splňující kritéria.
  • perPage — určuje, kolik stránek se zobrazí na jedné stránce seznamu? (Není to tak matoucí, jak to zní!) V základu je tato hodnota nastavena na 20, tudíž pokud je v seznamu více než 20 stránek, vytvoří se další stránka seznamu. Můžeš si tento efekt prohlédnout na nedávno vytvořených stránkách. Maximální hodnota je 250.
  • separate — určuje, jestli má mít každá položka v seznamu vlastní maličký chlíveček, nebo jestli mají být všechny v jednom chlívečku. Do hodnoty může napsat "yes" nebo "no" — pokud tam napíšeš "yes", skončíš se seznamem, ve kterém budou obrovské mezery mezi jednotlivými položkami. To většinou nechceš.
  • order — určuje pořadí stránek v seznamu.

Do hodnoty tohoto parametru je možné napsat hned několik věcí. Všechny je najdeš v kompletní dokumentaci. Pár nejužitečnějších jsem sepsal níže.

  • order="rating" — seřadí stránky podle hodnocení.
  • order="name" — seřadí stránky podle názvu (toho názvu v URL, ne samotného názvu stránky).
  • order="title" — seřadí stránky podle názvu (toho názvu, co je nahoře na stránce, ne podle URL).
  • order="created_at" — seřadí stránky podle data, kdy byly vytvořeny.
  • order="comments" — seřadí stránky podle počtu komentářů.
  • order="random" — všechno seřadí úplně náhodně! Promíchává pořadí každou minutu.

V základu je vše seřazováno vzestupně (první v seznamu budou nejnižší čísla, nebo bude seznam od A do Z). Aby se seřadili sestupně, připiš do hodnoty na konec 'desc' — např. order="rating desc".

Je důležité si všimnout, že není žádný konkrétní příkaz, který by specifikoval, že má být seznam zobrazen vzestupně. Pokud si tedy chceš být jitý, že se zobrazí vzestupně, buď za hodnotu nedopíšeš nic, nebo tam napíšeš "desc desc". Dává to smysl? Ne. Můžeme od Wikidotu opravdu očekávat něco lepšího? Ani náhodou.


2.3: ZOBRAZOVÁNÍ SEZNAMU


Fajn, takže teď když víme, jak do seznamu vybrat jen určité stránky, a jak upravit parametry takového seznamu, zbývá už jen v seznamu informace, které chcete.

Při zobrazování seznamu máš spoustu možností. Do těla modulu — tedy mezi [[module]] a [[/module]] — můžeš dát hned několik obsahových záložek.

Každá obsahová záložka je jako razítko. Vezměme si například %%title%%, který reprezentuje název stránky. Představ si tohle: modul ListPages má svůj list názvů. Orazí první název do seznamu, posune se níž, vezme další název a proces se opakuje až do konce seznamu. Konečným výsledkem je seznam názvů stránek.

Tady jsou ty nejužitečnější. Jako vždy v kompletní dokumentaci nejdete kompletní seznam. Je jich tam opravdu spousta, takže si neváhejte je projít.

  • %%title%% — reprezentuje název stránky.
  • %%title_linked%% — reprezentuje název stránky s odkazem na který můžete kliknout a budete na stránku přesunuti.
  • %%created_by%% — reprezentuje autora stránky.
  • %%created_at%% — reprezentuje datum, kdy byla stránky vytvořena.
  • %%rating%% — reprezentuje hodnocení stránky.
  • %%index%% — reprezentuje pozici stránky v seznamu.
  • %%content%% — reprezentuje veškerý obsah stránky. K tomu se později dostaneme.

Teď seriózně, dal jsem jich sem 7. Celkem je jich 56, i když nějaké jsou tak obskurní, že by je opravdu nikdy nikdo nepoužil.

Poznámka

ListPages nedokáže zobrazit název samotného SCP. Například pokud bys do seznamu chtěl zařadit SCP-173, neexistuje žádný způsob, jakým by se tam mohlo zobrazit jako "Socha".

Není to možně, protože názvy SCP jsou uchovávány pouze na stránkách jednotlivých sérií, a ne u SCP samotných. Proto je pro ListPages nemožné tuto informaci získat; sbírá pouze informace o stránkách a samotný obsah stránek již neprohledává.


Tudíž když teď známe všechny možné parametry, pojďme si ukázat ListPages v akci.

Vytvořím tu seznam…

  • Všech stránek vytvořených za poslední 3 měsíce…
    • created_at="last 3 month"
  • …s názvem začínajícím na písmeno "S"…
    • name="S%"
  • …s hodnocením nižším než 7…
    • rating="<7"
  • …a bez štítku "scp".
    • tags="-scp"
  • Chci, aby se mi nezobrazilo více než 40 výsledků…
    • limit="40"
  • …zobrazených na stránkách po 10…
    • perPage="10"
  • …a aby se všechny daly do stejného chlívečku, namísto rozdělení do samostatných chlívečků…
    • separate="no"
  • …a chci je mít seřazené sestupně podle hodnocení.
    • order="rating desc"
  • Chci je mít zobrazené v číslovaném seznamu…
  • …začínající datem, kdy byly vytvořené…
    • %%created_at%%
  • …následovaným názvem s odkazem na stránku…
    • %%title_linked%%
  • …za kterým bude jméno autora…
    • by %%created_by%%
  • …a celé to bude zakončené jejich hodnocením v závorkách.
    • (%%rating%%)

Tudíž jsem napsal následující modul:

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

…což nám vyplivne následující seznam:

  1. 23 Dec 2020 16:51 Stín a mráz vůkol nás by Utylike (3)
  2. 01 Dec 2020 10:41 SCP-REDD by Hajgrando (2)
  3. 08 Jan 2021 19:45 SCP-4000 by H3G1 (1)
  4. 04 Dec 2020 21:25 SPC-172-J by Lyppiatt (1)
  5. 02 Jan 2021 21:15 Rozšířený Testovací Záznam SCP-978 by Modular (0)
  6. 03 Dec 2020 20:22 SPC-169-J by Lyppiatt (0)

Je to užitečný seznam? Ne. Ale je to skvělý příklad.

Cool. Pokud jsi si v sandboxu také něco podobného vytvořili a fungovalo to, gratuluji! Pokud ne, pak ti také gratuluji, jenom trochu míň.

Poznámka: Pokud se rozhodneš vytvořit si modul ListPages na sandboxu, nezapomeň, že se ti budou zobrazovat stránky ze sandboxu, a ne ty z hlavní wiki! Také mě to pokaždé překvapí.

Domácí úkol: Podívej se na Nejlépe Hodnocené Stránky za Poslední Měsíc, dole klikni na +Možnosti a pak na Zdrojový kód, zkus tam najít moduly ListPages a pořádně si je prohlédni. Pokud tam všemu rozumíš a víš, co má co dělat, pak dobrá práce, víš, jak fungují seznamy stránek!


Prosím, nezapomeň, že se obsahová část tvého modulu nemusí vejít pouze na jeden řádek. Může být dlouhá tolik řádků, kolik si zamaneš.

Pokud má být jedna položka rozdělená do několika řádků, doporučuji nastavit si separate="yes", aby nebyl seznam matoucí.


A teď, když jsem pokryli základy ListPages, pojďme se podívat na to proslulé využití.


3: DĚLÁNÍ TÉ LISTPAGES VĚCIČKY


A tady to začne být trochu složitější.

SCP-2998 spolu s SCP-1893 a SCP-1173 jsou nejznámější stránky s ListPages Věcičkou a jsou zcela jistě zodpovědné za její současnou popularitu. Všechny tři byly napsány EskobarEskobarem, kterého to naučila AelannaAelanna, takže jim za to můžete poděkovat (pokud dokážete oživovat mrtvé).

Od té doby využívá ListPages Věcičku stále více a více článků. SCP-2111, SCP-3002, SCP-3939, SCP-3449, Návrh Uživatele: djkaktus III, SCP-3020, Návrh Uživatele: Jim North a mnoho, mnoho dalších ji také používají.

Myslím, že 3939 padne jako ulitá, ale možná jsem jen zaujatý.

Od teď budu namísto ListPages Věcičky používat zkratku LPV.


VARUJI TĚ! Používání LPV jde ruku v ruce s velkou zodpovědností: čtenář bude očekávat, že opravdu dobře opodstatníš, proč jsi ji použil. LPV by měla být používána pouze, pokud to koncept nebo formát článku opravdu vyžaduje. LPV vážně není vhodné pro každé druhé SCP.


3.1: CO JE TO LPV?


LPV je, když se SCP (nebo jakýkoliv jiný článek) skládá z několika stránek, ale všechny mají jeden společný Rating modul. LPV jednoduše poznáš podle URL adresy, kde na konci najdeš "/offset/X". Většinu (avšak ne veškeré) využití LPV takhle jednoduše poznáš.

Hodně nepřesně řečeno je to, když se obsah nějakého článku mění, když klikneš na nějaký odkaz, nebo obnovíš stránku.

Pro toto pravidlo jsou tu i výjimky — SCP-2786 a SCP-3211 nejsou LPV, protože používají [[html]] namísto [[module ListPages]]. [[html]] poznáš tak, že se část stránky načítá o pár sekund déle než zbytek. A také podle toho, že se změny dějí okamžitě.

Změny LPV se na rozdíl od těch [[html]] projeví až poté, co je stránka obnovena, nebo čtenář klikne na odkaz, který vede na /offset/.

SCP-3340 tenhle systém ničí úplně, protože sice používá [[html]] (ne ListPages), ale změny se projevují až poté, co je stránka obnovena.

Takže si to shrneme:

Jak LPV tak [[html]] jsou techniky, díky kterým se zdá, že se obsah stránek mění.

LPV funguje díky ListPages. [[html]] díky HTML, CSS a často i JavaScriptu.

Změny díky [[html]] se dějí okamžitě a mohou se týkat takřka čehokoliv. Ale mění pouze to, co je v bloku [[html]], který je již uvnitř stránky.

Změny díky LPV se týkají celé stránky. Ale může k nim dojít pouze poté, co uživatel klikne na nějaký odkaz, nebo obnoví stránku.

LPV je jednoduchá na naučení. [[html]] je trochu složitější.

Varování

Podle dokumentace spolu ListPages a [[html]] moc dobře nefungují! Nemůžete použít [[html]] v žádné z dětských stránek LPV — nebude fungovat. Viňte za to Wikidot.

Můžeš využít buď jedno nebo druhé, nikdy oboje (ačkoliv článek může obsahovat LPV i [[html]], pokud na sobě nejsou závislé). Vybírej podle toho, co je nejlepší pro tvůj článek, nebo podle toho, co ti nejlépe padne.


3.2: JAK LPV FUNGUJE?


LPV je velice specifické využití standardního seznamu stránek.

Takhle vypadá běžný LPV modul. Povšimni si všech parametrů, které jsou zde použité.

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

Asi jsi narazil na pár termínů, kterým nerozumíš, takže se na ně jdeme podívat.

  • category="fragment" — vybírá stránky z kategorie "fragment". Stránky z této kategorie se nezobrazují mezi Nedávno vytvořenými stránkami ani nikde jinde, což je dělá ideálními pro vytváření dětských stránek (tzv. childů), na které se podíváme za chvíli. Ale nejsou zase zcela nedetekovatelné.
  • parent="." — selektor parent vybírá stránky, pro které je rodičovská stránka (tzv. parent) ta, kterou nastavíte v hodnotě. parent="." vybírá stránky, jejichž parentem je stránka, na které se modul nachází. Parent se dá nastavit dole na stránce, pokud klikneš na + Možnosti a pak na Parent. Tam napíšeš název stránky, pod kterou bys chtěl, aby ona stránka spadala. Tudíž pokud do kolonky na stránce A nastavíš do parentu stránku B stane se stránka B parentem stránky A.
  • order="created_at" — tohle bys už měl znát — řadí stránky podle data jejich vytvoření. SCP-1893 seřazuje svoje stránky náhodně.
  • limit="1" — tento parametr omezuje počet stránek, které ListPages zobrazí, na jednu. Pouze jedna stránka.
  • %%content%% — tento atribut říká, aby namísto pouhé části stránky (název, hodnocení, atd.) modul zobrazil kompletní obsah vybrané stránky. Prostě ti tam vloží veškerý obsah, a to včetně CSS modulů.
  • offset="@URL|0" — tento selektor je trochu náročnější na vysvětlení, takže to udělám pomocí obrázků.


3.3: PARAMETER OFFSET


Takže, řekněme, že máme SCP, které jsme zrovna dopsali. Ten zelený box níže reprezentuje naší nově napsanou stránku.

lp1.png

Teď do naší stránky vložíme modul ListPages. Ten bude reprezentován tou obrovskou dírou (později díru vyplníme příkazem %%content%%).

lp2.png

Teď vytvoříme dvě dětské stránky, tedy childy. Tyto stránky vyplní díru v rodičovské stránce, tedy v parentu.

Co přesně jsou childy vám vysvětlím později, pro teď je budou reprezentovat tyto ošklivé lososové boxy:

lp3.png

Tudíž tyto dva childy (lososová) jsou dětské stránky parentu (zelená).

Do parentu vložíme vložíme ListPages modul, který sám najde, vybere a zobrazí obsah těch dvou childů:

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

Což vyústí v následující parent:

lp5.png

A už nastal první problém: parent teď zobrazuje obsah obou childů, protože ListPages modul vždy zobrazuje všechny stránky, které jen může. Tedy pokud ho nějak neomezíme.

A přesně to také uděláme, nastavíme limit na "1". Tím ListPages donutíme ukázat obsah pouze jednoho childu:

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

To udělá následující:

lp4.png

Super! Teď máme ListPages modul, který zobrazuje obsah pouze jednoho childu. Druhý child je připravený a čeká, než bude moct zobrazit svůj obsah, až mu to modul dovolí.

Tak, a jak tedy zobrazíme obsah druhého childu?

Už jsme si ukázali, že když parent "roztáhneme" — tedy donutíme ho, aby ukazoval obsah obou childů — moc nám to nepomůže, protože čtenář stále uvidí i první child.

Takže potřebujeme přesunout parent doprava.

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

Tím docílíme přidáním parametru offset. offset si nejlépe představíš jako vzdálenost od začátku seznamu childů. které chceš zobrazit.

lp7.pnglp8.pnglp9.pnglp10.png

Výchozí hodnota parametru offset je "0", což znamená, že bude ukazovat obsah prvního childu v seznamu. To můžeš samozřejmě měnit ručně, ale proč bys to dělal?

offset="@URL" znamená, že namísto toho, aby byl offset předem definované číslo, bude se měnit podle URL. Pokud jsi na stránce, jejíž URL končí na "/offset/X", znamená to, že adresa URL na stránce automaticky nastavila hodnotu offsetu. Například http://www.scp-wiki.net/scp-2998/offset/1.

To umožňuje měnit offset tím, že čtenáři dáš odkaz s URL adresu na další stránku. SCP-2998 a spousta dalších to dělá přes odkaz na konci každého childu. SCP-3939 to dělá přes hned několik odkazů na konci každého childu.

offset="@URL|0" nastavuje offset podle URL, ale URL nespecifikuje offset — například když čtenář poprvé načte stránku, to nastaví offset na 0. Můžeš tuto hodnotu nastavit, jak budeš chtít — třeba "@URL|21" by fungovalo — ale s 0 se pracuje nejjednodušeji. To záleží na pořadí, ve kterém chceš své childy mít a jaký chceš mít jako první.

SCP-1893 nedává čtenáři žádný odkaz. Namísto toho jsou stránky seřazeny náhodně za pomoci parametru order="random". Hodnota offsetu zůstává výchozí (0), tudíž po každém obnovení stránky se zobrazí první stránka v seznamu, tedy náhodná stránka.

  • Poznámka k order="random": Pořadí stránek s order="random" se aktualizuje každou minutu. Dobrá zpráva: zpřehází se to samo a ty nemusíš ani hnout prstem. Špatná zpráva: Dřív se to opravdu nezpřehází. Obnovovat stránku pořád dokola a dokola tě nikam nedostane — po dobu celé minuty uvidíš pouze jednu a tu samou stránku.


3.4: VYTVÁŘENÍ CHILDŮ


Jak jsem již říkal výše, LPV potřebuje jednu rodičovskou stránku (parent) a několik dětských stránek (child).

Obvykle je docela dobrý nápad vytvořit parent až jako poslední, protože než vytvoříš všechny childy, nějakou chvíli ti to zabere, proto také nejdřív vysvětlím, jak vytvořit právě je. Nejlepší bude, když si všechny stránky vytvoříš na sandboxu a zkusíš si je tam i propojit do LPV, tudíž to vše pak jen přenést nebude tak velký problém, ale jistota je jistota.

Childy jsou to, co tvoří obsah tvé LPV.

Budu tu využívat SCP-3939 jako příklad.

Modul ListPages má nastavený offset="@URL|0", takže hlavní stránka je stejná jako SCP-3939/offset/0.

Child, ze kterého bere obsah, je fragment:SCP-3939-0. Podívej se na zdrojový kód childu a parentu a zkus najít všechny rozdíly.

Měl bys sis všimnout tří věcí:

  1. Child má v sobě veškerý obsah, který nenajdeš v parentu.
  2. Child obsahuje tři odkazy, které přesměrují čtenáře na jiné offsety.
  3. Parent má v sobě Rating modul a CSS formátování — tedy vše, co musí být na všech stránkách společné.

Co se položky 3 týče, můžeš samozřejmě mít všechny věci, které chcete mít u všech childů, přímo v childech, ale dát je do parentů je mnohem jednodušší. Pokud pak potřebuješ něco upravit, stačí to udělat jen jednou u parentu a ne několikrát na všech childech.

Povšimni si, že v případě SCP-3939 je obrázek vložen do childů, namísto toho, aby byl jen v parentu. Udělal jsem to tak, protože na jedné ze stránek obrázek být nemá. Pokud by tedy byl v parentu, musel by se obrázek zobrazit na všech stránkách.
Pokud budeš dělat něco podobného, vlož samotný soubor obrázku na jednu stránku!

Povětšinou budeš vkládat drtivou většinu obsahu do childů, ale definitivně nemusíš! Podívej se na SCP-3306, LPV je tam jen na úplném konci stránky a mění se tak pouze její konec.


Pokud chceš vytvořit child, vytvoř stránku, jejíž URL je "fragment:něco". Za "něco" můžeš dosadit cokoliv, co chceš.

Je opravdu důležité, aby URL začínala na "fragment:". Fragmenty se nezobrazují v Nejlépe Hodnocených Stránkách ani v Nově Vytvořených (avšak stále jsou viditelné v Posledních Změnách). Taktéž se fragmenty vyhýbají všem možným systémům a slouží jen pro účely LPV.

A to "něco" může být sice cokoliv, ale doporučuji pojmenovávat je podle tvého SCP a na konec doplnit číslo offsetu. Tudíž fragmenty SCP-XXXX by byly fragment:SCP-XXXX-0, fragment:SCP-XXXX-1, fragment:SCP-XXXX-2 a tak dál.

Pokračuj tak u každého childu.

Ujisti se, že vytváříš childy ve správném pořadí! V tomto návodu ti doporučuji seřazovat stránky podle času vytvoření za pomoci order="created_at". Můžeš je seřadit, jak chceš, ale pokud je budeš seřazovat podle času vytvoření, buď si opravdu jist, že je vytváříš ve správném pořadí.

Také se ujisti, že childy obsahují odkaz na další offset, aby se čtenář mohl mohl přesunout na další část!


Dalším krokem je nastavit parent jednotlivých childů. Klikni dole u každého childu na + Možnosti, pak na Parent a tam do kolonky napiš název stránky, která má být parentem (názvem myslím to, co je v URL!). Poté, co tam naťukáš pár písmen, vyjede ti pár možností, a pak klikni na stránku tebou vybranou.

Pokud jsi svůj parent ještě nevytvořil, pak se v nabídce nezobrazí. Není se čeho bát — prostě to udělej až po tom, co parent vytvoříš.


3.5: VYTVÁŘENÍ PARENTŮ


Když teď máme vytvořené childy, potřebujeme parent. Parent je jako nazelenalé brýle, kterými čtenář může vidět ty lososové childy, a to pěkně pojednom.

Vše, co potřebuješ udělat, je vytvořit novou stánku — tentokrát normální, bez "fragment:" — a pak do ní plesknout svůj ListPages modul.

Modul ListPages, který bych ti doporučil, je:

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

To je ten stejný modul, který můžeš najít v sekci 3.2: "Jak LPV funguje?" výše. Každý použitý atribut je tam vysvětlený.

Jediný parametr, který bys mohl chtít měnit, je order. Vždy doporučuji vytvářet stránky v pořadí, ve kterém je chcete zobrazit, a pak je seřadit hodnotou "created_at". Avšak pokud následuješ mé doporučení o vytváření fragmentů, měl bys moct seřadit stránka podle "name" nebo "title". Pokud chceš, můžeš jít ve stopách SCP-1893 a seřadit stránky hodnotou "random".

Na sandboxu musí být parent v kategorii "collab:". Ujisti se, že URL začíná na "collab:".
ListPages bude ze základu hledat stránky ve stejné kategorii jako parent, tudíž pokud se v modulu rozhodneš vynechat selektor "category", všechny tvé childy musí být také v kategorii "collab:".


Pokud jsi tak již učinil, nastav u childů parent.

Na sandboxu to není možné, pokud nezačíná URL parentu ":collab:". Pokud jsi tento krok nedopatřením přeskočil, neboj — klikni dole na stránce na + Možnosti, pak na Přejmenovat a pak připiš na začátek názvu stránky collab:. Tento krok rozhodně není potřeba na hlavní wiki.

No tak zadrž, Croquembouchi!

"Proč používáš tyto specifické selektory?" ptáš se. "parent="." a order="created_at" jsou super a všechno, ale co mi brání v použití jiných selektorů?"

A na to ti říkám: "Vůbec nic. Můžeš tam dát selektory, které chceš, aby vybíraly childy."

Ale je tu jedna taková drobnost: řekněme, že vytvoříš několik childů — fragment:SCP-XXXX-0fragment:SCP-XXXX-10. Seřadíš je selektorem order="name" a vybereš za pomoci selektorů category="fragment" a name="SCP-XXXX-%". A to funguje! Perfektní.

Ale nikomu pak nic nebrání ve vložení stránky mezi tvé childy, pokud by se jim zachtělo. Pokud by pak někdo šel a vytvořil fragment:SCP-XXXX-0a bez tvého vědomí, zobrazil by se mezi offsetem 0 a 1 a mohl by ti narušit celý systém.

Tito zlomyslní lidé na tebe ale nemůžou, pokud využiješ order="created_at", aniž by vyloženě cestovali zpět v čase. Popravdě by bylo ještě bezpečnější využít created_by="tvé uživatelské jméno". Pokud tedy neděláš něco, na čem spolupracuješ s jiným autorem.

A parent="." je jenom taková malá blbůstka, která za sebou na childech zanechá odkazy k parentu. Dost užitečná pro někoho, kdo nemá nejmenší tušení, jak se tam dostal.

Také bych rád připomněl, že je super, když autor někam sepíše seznam všech fragmentů. Je to vážně užitečné pro korektory a zvídavé lidi jako jsem já, kteří se ve všem rádi pohrabou, aby zjistili co jak funguje.


4: ZÁVĚR


Oukej. Máme hotovo. Znáš veškeré základy o seznamech stránek a ListPages Věcičce.

Ale i tak buď opatrný: nyní oplýváš ohromnou, děsivou mocí; mocí ListPages. Užívej ji s rozvahou, pokorou a hlavně střídmostí. Přetvoření formátu za pomoci ListPages je úžasné, pokud se povede. Pokud však ne, stáhne s sebou ke dnu i ostatní stránky, které ListPages používají.

Určitě se neboj zeptat na discordu jestli je vše v pořádku, ale co je nejdůležitější, prober s někým svůj nápad, než začneš psát. Neexistuje nic horšího, než vidět před sebou kus dobře odvedené práce, která je vecpaná do nápadu, který si ji nezaslouží.


A samozřejmě nezapomeň, že ListPages má mnohem více využití, než jen ta 2 nebo 3, která jsem zde popsal.

Využij sérii několika náhodných ListPages, abys udělal modulární článek, který bude pokaždé zcela jiný a unikátní. Využij ListPages spolu s [[tabview]], aby mohla mít každá záložka své vlastní poznámky pod čarou.

Udělej něco, o co se ještě nikdo nikdy ani nepokusil. Možnosti jsou nekonečné. Předči své předchůdce, jedině tak můžeš naplnit své povstání.


Pokud máš nějaké další doplňující otázky, zeptej se na discordu, kde ti určitě někdo rád pomůže.

Děkuji, že jsi tu se mnou vydržel.

Croquembouch mizí.












5: RYCHLE A ZBĚSILE


Teď, když Croque poskytl základní technické vysvětlivky, se já, ROUNDERHOUSE, můžu pořádně vyblejsknout před tebou, můj milý čtenáři, jež jsi podobně jako já buď moc líný na to, aby si tu monstrozitu nahoře celou pročetl, nebo se lépe učíš skrze příklady a praxi. V tomto návodu projedeme LPV pro tvůj článek rychle a zběsile. Ale pokud něco popleteš a nebude ti modul fungovat, budeš muset znát vše, co výše vysvětlil Croque, byste to mohli opravit. Budu tu používat SCP-9000 jako příklad, takže když uvidíte "scp-9000", dosaďte si číslo vašeho SCP.


5.1: ČAS NA FRAGMENTY


Začneme na začátku, rozhodni se, kolik stránek chceš má tvé SCP mít. Řekněme, že chceš tři. Normálně si vytvoříš tři stránky v kategorii fragment:. DŮLEŽITÉ: VYTVOŘ STRÁNKY V POŘADÍ, VE KTERÉM SE MAJÍ ZOBRAZIT. Tudíž tvé ti stránky by měly být "fragment:scp-9000-1", "fragment:scp-9000-2" a "fragment:scp-9000-3". Na prvním chceš mít iteraci, která půjde jako první, na druhém to, co má být jako druhé a tak dále. Očividně nemusí být takto pojmenované, ale pokud to tak není, může to vyústit v menší zmatení. DALŠÍ POZNÁMKA: NEDÁVEJ NA TYTO STRÁNKY RATING MODULY. To by tak trochu zkazilo celou pointu ListPages.


5.2: RODIČE JSOU DOMA


Jako další si vytvoříme rodičovskou stránku, čili parent. Když děláme SCP-9000, tak vlezeme na příslušnou stránku a vytvoříme ji. Její obsah bude následovný:

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

[!-- http://scp-cs.wikidot.com/fragment:scp-9000-1 --]
[!-- http://scp-cs.wikidot.com/fragment:scp-9000-2 --]
[!-- http://scp-cs.wikidot.com/fragment:scp-9000-3 --]

To, co je mezi [!-- --] jsou poznámky. Ty se na stránce nezobrazí, ani nijak nic nenaruší. Jsou zde jen pro edit či pro korektory.


5.3: JAK SPRÁVNĚ RODIČOVAT


Fajn, teď se vrátíme zpět na tvé fragmenty. Budeš jim muset nastavit parent na hlavní stránku, kterou jsi vytvořil v předchozím kroku. Obrázek vydá za tisíc slov.

parenting.png

parenting2.png

To udělej u všech fragmentů. Očividně tam ty místo "scp-9000" dáš název tvého článku.

Poznámka od Croquea: Na sandboxu musí být parent v kategorii collab, jinak vám vyběhne error, když se pokusíte nastavit parent. Kategorie se dá změnit tak, že dole na stránce klikneš na //+ Možnosti a pak na Přejmenovat, kde připíšeš před název stránky "collab:".//


5.4: POHYBOVÁNÍ SE


Oukej. Je jasné, že budeš chtít, aby se mohl čtenář po offsetech tak nějak pohybovat a mohl přejít z jedné stránky na další. A přece to nebude dělat ručním přepisováním URL. Vzhledem k tomu, že se článek automaticky otevře s obsahem "fragment:scp-9000-1", musíš do něj vložit způsob, jakým se dostat na "fragment:scp-9000-2". Abys to udělal, nejideálnější je dolu do "fragment:scp-9000-1" vložit něco takového:

[[>]]
[[[http://scp-cs.wikidot.com/scp-9000/offset/1 | DALŠÍ STRÁNKA]]]
[[/>]]

"offset/1" by vlastně vedl na stránku, jejíž obsah by tvořil "fragment:scp-9000-2". Dál by se hodilo, udělat něco podobného i na další stránce, tedy "fragment:scp-9000-2" s tím, že přidáme i odkaz na předchozí stránku.

[[<]]
[[[http://scp-cs.wikidot.com/scp-9000 | PŘEDCHOZÍ STRÁNKA]]]
[[/<]]

[[>]]
[[[http://scp-cs.wikidot.com/scp-9000/offset/2 | DALŠÍ STRÁNKA]]]
[[/>]]

Něco podobného bys udělal i pro "fragment:scp-9000-3".


5.5: SLOVÍČKO NA ZÁVĚR


Za předpokladu, že jsi následoval tyto instrukce pěkně krok po kroku, tohle by mělo fungovat. Pokud vlezeš na stránku SCP-9000, měl bys vidět obsah stránky fragment:scp-9000-1 s odkazem na offset/2, který hrdě nese obsah fragment:scp-9000-2 a tak dále a tak dále. Měly by spolu sdílet jeden společný Rating modul, což je také jediný důvod pro LPV. Neboj se napsat na discordu, pokud budeš mít nějaké dotazy nebo si nebudeš něčím jistý.

Navždy tvůj RounderhouseRounderhouse. 👋

Není-li uvedeno jinak, obsah této stránky je pod licencí Creative Commons Attribution-ShareAlike 3.0 License