diff --git a/kap-modelova-implementace.tex b/kap-modelova-implementace.tex index 27369cc..06f1fca 100644 --- a/kap-modelova-implementace.tex +++ b/kap-modelova-implementace.tex @@ -121,6 +121,48 @@ V bloku s obsahem bude původní obsah \uv{Ahoj, světe!} nahrazen za řetězec Z principu by žádný obsah neměl být definován přímo v šabloně, nýbrž by měl být do stránky vkládán generátorem z proměnných, nebo ze sázeného obsahu. V rámci modelové implementace je toto nepsané pravidlo dodržováno. +\section{Automatické generování vícevrstvé navigace} + +\quest[inline]{Je následující část srozumitelná?} + +Obsah modelové implementace je dělen do stromové datové struktury o potencionálně nekonečné hloubce, kdy každá část větve je v rámci generátoru vlastní kategorií, nikoliv stránkou. Pro modelovou implementaci bylo zvoleno, aby navigace byla generována v návaznosti na aktivní cestu ve stromě. Ve stránce jsou dvě různé navigace, jedna hlavní a vždy vidiětelná, která obsahuje rozdělení obsahu dle škol a druhá navigace, která zobrazuje aktivní větev stromu. + +První vrstvou struktury jsou hlavní sekce, v rámci implementace pojemnované jako $L_1$, které jsou vypsány vždy ve vlastní navigaci. Pod touto navigací se zobrazuje seznam všech kategorií, které vybraná položka v $L_1$ obsahuje. Pokud uživatel zvolí kteroukoliv položku v $L_2$, v navigaci se objeví další sloupec, který obsahuje všechny podkategorie vybrané položky, tedy položky ve vrstvě $L_3$. Takto lze stromem procházet potencionálně do nekonečna. Styly modelové šablony ovšem počítají s maximální hloubkou čtyř subkategorií. + +Tato funkcionalita je implementována pomocí dvou cyklů. První cylkus se provádí pro všechny rodiče aktivní ktegorie vrstev $L_2,L_3,\dotsc,L_n$, kde $n$ je aktuílní vrstva. V každé iteraci se mění kontext, ve kterém generátor pracuje. Z daného kontextu generátor vypisuje všechny subkategorie každého svého rodiče. V druhém cyklu se vypisují všichni potomci dané stránky, tedy potomci ve vrstvě $L_{n+1}$. + +\begin{lstlisting}[label=lst:obsah-cyklus1,caption=Cyklus pro vypisování všech rodičů v dané větvi navigace] +{% if section.ancestors %} + {% for s in section.ancestors %} + {% if loop.index < 2 %}{% continue %}{% endif %} + + {% endfor %} +{% endif %} +\end{lstlisting} + +\begin{lstlisting}[label=lst:obsah-cyklus2,caption=Cyklus pro vypisování všech potomků dané stránky do navigace] +{% if section.subsections %} + +{% endif %} +\end{lstlisting} + \section{Rozšíření šablony} Ve výchozím stavu generátor neumí vkládat nic jiného, než je uvedeno ve specifikaci CommonMark\footnote{\url{https://commonmark.org/}}. Dle požadavků modelového webu je nutné, aby generátor uměl vkládat videa přímo do stránky. Taková funkce není soušástí specifikace CommonMark a je tedy potřeba rozšířit funkcionalitu generátoru. Nejvhodnějším způsobem přidání vlastní funkce je využití vlastních filtrů, které se v rámci generátoru nazývají \uv{shortcode}. diff --git a/prace.pdf b/prace.pdf index 93c063e..68f9cf1 100644 Binary files a/prace.pdf and b/prace.pdf differ