Šablony jsou čistě prezentační. Data berou z pohledových modelů (data/generated/views/**), nikdy z ručně psané hlavičky stránky — adaptéry nesou jen routovací obálku.
Sdílené komponenty
| Soubor | K čemu |
|---|---|
macros/ui.html | hlavička stránky, drobečky, dlaždice, prázdné stavy, patička |
macros/table.html | jediná tabulková komponenta |
macros/meta.html | sociální a SEO metadata |
macros/learning*.html | prvky vzdělávací vrstvy |
partials/jsonld.html | strukturovaná data stránky |
Co je vynucené
Znovupoužití komponent. Obsahová šablona musí importovat a použít sdílenou UI knihovnu. Výjimky jsou per-soubor a s odůvodněním, ne plošné.
Tabulky přes jednu komponentu. Šablona s <table> mimo tabulkové makro build shodí. Obal navíc nese typ záznamu, který provazuje řádky se strukturovanými daty stránky.
Metadata jen na jednom místě. Žádná šablona nepíše značky pro sociální sítě ručně — vydává je jediné makro podle politiky v datech, a kontrola po sestavení to ověřuje.
Žádný inline Ověř si, že to sedí Přidáváte nový typ stránky s vlastní hodnotou `record_type`. Co se stane při sestavení, když nic dalšího neuděláte? Build spadne — a je to tak správně. Politika metadat je v datech a kontrola po sestavení ji ověřuje obousměrně: každý Doplnit je potřeba, jaký typ dokumentu to je pro sociální sítě a jaký výchozí typ pro strukturovaná data. Za zmínku stojí, jak se ta kontrola osvědčila: přibyl typ stránky v jednom úkolu, obousměrná brána vznikla nezávisle v jiném, a build spadl při prvním běhu, kdy se ty dvě věci potkaly. Přesně na tohle ta kontrola je — chytit nesoulad, o kterém nikdo neví, že ho způsobil.style. Utility třídy, ne vlastní atributy. Kontroluje se nad vydaným HTML.Zobrazit odpověď Skrýt odpověď
record_type použitý v obsahu musí mít záznam v konfiguraci a každý záznam v konfiguraci musí být v obsahu použitý. Chybějící ani mrtvý typ tedy neprojde.