Automatické generování vícevrstvé navigace
This commit is contained in:
parent
b0013192e6
commit
d458088602
@ -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.
|
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 %}
|
||||||
|
<ul>
|
||||||
|
{% set s = get_section(path=s) %}
|
||||||
|
{% for s in s.subsections %}
|
||||||
|
{% set s = get_section(path=s) %}
|
||||||
|
<li><a href="{{ s.permalink }}"
|
||||||
|
{% if current_path == s.path %}
|
||||||
|
class="active"
|
||||||
|
{% elif current_path is containing(s.path) %}
|
||||||
|
class="ancestor"
|
||||||
|
{% endif %}
|
||||||
|
>{{ s.title }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% 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 %}
|
||||||
|
<ul>
|
||||||
|
{% for s in section.subsections %}
|
||||||
|
{% set s = get_section(path=s) %}
|
||||||
|
<li><a href="{{ s.permalink }}">{{ s.title }}</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
\end{lstlisting}
|
||||||
|
|
||||||
\section{Rozšíření šablony}
|
\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}.
|
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}.
|
||||||
|
Reference in New Issue
Block a user