Filtr pro výpis souborů
This commit is contained in:
parent
eb3ebb81ff
commit
70a30b2566
@ -109,9 +109,9 @@ Protože byly zadány všechny povinné i nepovinné atributy, výtupem toho fil
|
||||
<div class="metadata">2020-03-22</div>
|
||||
\end{lstlisting}
|
||||
|
||||
Pro modelový web byla zvážena možnost vypisování obsahu automaticky, tedy že program zkontroluje složku s obsahem a pokud narazí na soubor se specifikovanou koncovkou, vypíše jej do obsahu podle daných pravidel. Generátor Zola umožňuje prohledávání složek a práci se soubory, v rámci Zoly takzvanými \uv{assety}. Tuto funkcionalitu lze tedy implementovat jednoduchým cyklem a filtem, které zpracují všechny případné soubory ve složce dané stránky. Zoubory lze filtrovat mnoha způsoby, z nichž je nejuniverzálnější funkce \texttt{matching()}, která dovoluje filtrovat vstup regulárními výrazy dle implementace regex v jazyce Rust\footnote{\url{https://docs.rs/regex/1.3.6/regex/}}.
|
||||
Pro modelový web byla zvážena možnost vypisování obsahu automaticky, tedy že program zkontroluje složku s obsahem a pokud narazí na soubor se specifikovanou koncovkou, vypíše jej do obsahu podle daných pravidel. Generátor Zola umožňuje prohledávání složek a práci se soubory, v rámci Zoly takzvanými \uv{assety}. Tuto funkcionalitu lze tedy implementovat jednoduchým cyklem a filtem, které zpracují všechny případné soubory ve složce dané stránky. Zoubory lze filtrovat mnoha způsoby, z nichž je nejuniverzálnější funkce \texttt{matching()}, která dovoluje filtrovat vstup regulárními výrazy dle implementace regex v jazyce Rust\footnote{\url{https://docs.rs/regex/1.3.6/regex/}}. V následujícím příkladu je pro ilustraci této funkcionality implementován program vypisující obrázky s předem definovanými koncovkami.
|
||||
|
||||
\begin{lstlisting}[caption=Automatický výpis obrázků s danými koncovkami]
|
||||
\begin{lstlisting}[caption=Automatický výpis obrázků s pevně definovanými koncovkami]
|
||||
{% if section.assets %}
|
||||
{% for asset in section.assets %}
|
||||
{% if asset is matching("\.(?i:jpg|gif|png)$") %}
|
||||
@ -121,7 +121,51 @@ Pro modelový web byla zvážena možnost vypisování obsahu automaticky, tedy
|
||||
{% endif %}
|
||||
\end{lstlisting}
|
||||
|
||||
Toto řešení ovšem není ve výsledném modelu implemntováno, protože jedním z požadavků je možnost vkládání těchto souborů na libovolné místo v obsahu. Implementací automatického vyplňování by se neznemožnilo libovolné vkládání těchto souborů, ovšem soubory by se v obsahu vyskytovaly několikrát, což by mohlo vést ke zvýšené nepřehlednosti celé stránky.
|
||||
Toto řešení ovšem není ve výsledném modelu implemntováno, protože jedním z požadavků je možnost vkládání souborů na libovolné místo v obsahu. Na stejném principu je ovšem vytvořen filtr pro vládání souborů, který tento požadavek splňuje. Výhodou filtru je, že ho lze vyvolat kdekoliv v obsahu a není vázán na pevně dané místo v šabloně. Ten očekává alespoň jeden parametr uvádějící název souboru bez koncovky, pro dle kterého pak filtr vyhledá všechny různé formáty s tímto názvem a ty vloží do stránky. Druhým libovolným parametrem je název souboru, který se do stránky vloží místo názvu souboru. to umožňuje uivateli volně pracovat s názvy souborů v souborvé struktuře bez ovlivnění obsahu stránky.
|
||||
|
||||
\begin{lstlisting}[label=lst:filtr-souboru,caption=Filtr pro výpis souborů s automatickým hledáním]
|
||||
{% if section.assets and filename %}
|
||||
<div class="file">
|
||||
<div class="title">
|
||||
{% if title %}
|
||||
{{ title }}
|
||||
{% else %}
|
||||
{{ filename }}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% for asset in section.assets %}
|
||||
{% if asset is matching(section.path ~ filename ~ "\..*$") %}
|
||||
<a href="{{ get_url(path=asset) }}" class="format">{{ asset | split(pat=".") | last }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
\end{lstlisting}
|
||||
|
||||
V první části filtr zkontroluje, zda byl vyplněn parametr \texttt{title} a v přípdě že ano, nastaví ho jako název souoru v obsahu. V opačném případě využije název souboru samotného. Ve druhém kroku nastává kontrola, zda se ve složce nacházejí soubory (mimo hlavní soubor \texttt{\_index.md}) a pokud ano, přes všechny soubory se iteruje kontrola, zda soubor splňuje podmínku názvu. Kontrola této podmínky je tvořena kombinací proměnných generátoru a regulárního výrazu. Každý soubor který splňuje podmínku je poté vypsán do obahu jako přímý odkaz k jeho stažení.
|
||||
|
||||
Jako text v odkazu se použije koncovka souboru, která se záskává spojením několika filtrů, tedy filtru \texttt{split(pat=".")}, který rozdělí řetězec podle znaku tečka do pole a navazující filtr \texttt{last} vrátí poslední položku v poli. Tím filtr získá samotnou koncovku souboru.
|
||||
|
||||
Filtr lze vyvolat stejně, jako je tomu u filtru pro vkládání videa. Název filtru je opět definován názvem souboru \texttt{tmeplates/shortcodes/document.html} a bude jím tedy název \texttt{document()}.
|
||||
|
||||
\begin{lstlisting}[label=lst:vyvolani-filtru-souboru,caption=Vyvolání filtru \ref{lst:filtr-souboru}]
|
||||
{{ document(
|
||||
filename="pracovni-list",
|
||||
title="Pracovní list"
|
||||
) }}
|
||||
\end{lstlisting}
|
||||
|
||||
V příkladu \ref{lst:vyvolani-filtru-souboru} je definován i nepovinný atribut \texttt{title}, který kvůli přehlednosti umožňuje nastavit název. Atribut \texttt{filename} definuje název souboru ve složce bez koncovky. Všechny soubory, které chce uživatel vypsat, musí tedy mít stejný název a musí se lišit pouze koncovkou. Jsou li ve složce soubory s názvem \texttt{pracovni-list} a koncovkami \texttt{pdf}, \texttt{odt}, \texttt{djvu} a \texttt{ps}, bute výstupem filtru následující HTML.
|
||||
|
||||
\begin{lstlisting}[caption=Výstup direktivy z příkladu \ref{lst:vyvolani-filtru-souboru}]
|
||||
<div class="file">
|
||||
<div class="title">Pracovní list</div>
|
||||
<a href="pracovni-list.pdf">pdf</a>
|
||||
<a href="pracovni-list.odt">odt</a>
|
||||
<a href="pracovni-list.djvu">djvu</a>
|
||||
<a href="pracovni-list.ps">ps</a>
|
||||
</div>
|
||||
\end{lstlisting}
|
||||
|
||||
\section{Optimalizace}
|
||||
|
||||
|
Reference in New Issue
Block a user