Jak generátor rozhoduje o routách, co umí load_data a pět pastí šablonovacího jazyka, na které v tomhle repozitáři každý najede.
A603Inženýrství12 minVývojář
Po téhle lekci
Vysvětlíte, jak vzniká routa a proč potřebuje soubor v content/.
Použijete load_data k načtení konfigurace do šablony.
Vyhnete se pěti známým pastím šablonovacího jazyka.
Zola je statický generátor. Podstatné pro tenhle projekt: routa vzniká ze souboru v content/. To je celý důvod, proč existují generované adaptéry — kanonická data jsou JSON a Zola z JSON routu neudělá.
Sekce a stránky
_index.md dělá sekci (má pages, subsections), ostatní soubory jsou stránky. Šablona sekce k nim přistupuje přes section.pages, stránka ke své sekci přes get_section(path=…).
load_data
Načte TOML/JSON přímo v šabloně:
{% set learning = load_data(path="data/learning.toml") %}
Díky tomu můžou být popisky, pořadí a ikony v datech, ne v markupu. Používá to navigace, metadata i tahle vzdělávací vrstva.
Pět pastí
Komponenty
Shortcodes od Zoly 0.23 neexistují. Nahradily je komponenty, které jdou volat v šablonách i uvnitř markdownu:
Volání bez těla je {{ <callout kind="priklad" /> }}, s tělem {% <callout kind="priklad"> %}…{% </callout> %} — tělo je uvnitř dostupné jako body a markdown v něm vykreslí filtr markdown.
Nestringový argument patří do složených závorek: poradi={3}, polozky={seznam}. Řetězcový literál je bez nich.
Soubor komponentu nikam neregistruje — jméno je globální, takže dvě komponenty stejného jména kolidují. Sdílené komponenty v macros/ proto nesou prefix podle role (ui_, table_, meta_, nav_, …); komponenty v components/, které volá autor obsahu z markdownu, zůstávají bez prefixu a krátké (callout, kontrola, prikaz).
Dvě věci, které při migraci tohohle webu ověřoval a na které nenarazil — aby je nikdo nemusel odvozovat znovu:
Volání bez těla nefunguje v markdownu.{% <prikaz a="1" /> %} skončí na «Found / but expected >». Beztělové volání jde jen ve výrazu uvnitř šablony ({{ <prikaz a={v} /> }}). Cokoli volá autor obsahu, musí proto brát svůj obsah jako tělo. V content/ tohohle webu není ani jedno beztělové volání — všechna jsou párová.
**| default(value=…) se nespustí, když volající pošle doslovné "".** Prázdný řetězec je hodnota, ne chybějící klíč, takže se vykreslí prázdno bez chyby. Prošlo se 46 komponent, z nichž 9 nějaký parametr přes defaultprotahuje; žádné volání jim""` nepředává. Tady to tedy neškrtlo — ale je to stejná třída chyby jako past 5.
Obsah stránek se navíc od 0.23 pouští přes Teru před parsováním markdownu. Doslovný příklad šablonového jazyka v textu proto musí být obalený blokem raw / endraw — starý escape {%/* … */%} už neexistuje. (Tenhle odstavec ho proto pojmenovává, místo aby ho ukazoval: raw uvnitř raw se ukončí tím prvním endraw, na který narazí.)
Ověř si, že to sedí
Přidáte novou stránku pod content/, ale na webu se neobjeví. Čím začít?Zobrazit odpověďSkrýt odpověď
Třemi věcmi, v tomhle pořadí:
Šablona v hlavičce. Chybějící nebo překlepnutá template znamená, že se stránka vykreslí výchozí šablonou — nebo že sestavení spadne.
Je nadřazená sekce sekcí? Bez _index.md v adresáři Zola stránky uvnitř nesbírá a section.pages je nenajde.
Neskončila v generovaném rozsahu? Pokud jste ji položili pod content/dossiers/** nebo content/entities/, synchronizace ji při dalším sestavení smaže — tam patří jen generované adaptéry.
Když sestavení projde a stránka existuje v public/, ale není vidět v navigaci, je to jiný problém: navigační strom se generuje z dat a novou stránku musí zahrnout příslušný generátor.
Kanonické znění pojmů
Lekce pojem vysvětluje. Závazná definice je tady — když se rozejdou, platí tahle stránka.