########## Komponenty ########## Speciálním zápisem lze do šablony vkládat komponenty jako například formulář pro registraci k newsletteru. V šabloně se používá pouze zjednodušený zápis a na výstupu se automaticky doplní potřebné prvky - formuláře, třídy atd. **CSS se nesmí spoléhat na generovaný výstup - s budoucí verzí se může změnit!** V budoucnu se například může změnit typ inputu z *text* na *email*, takže není možné v CSS definovat vzhled přes typ inputu a je nutné použít třídu. =================== Vyhledávací políčko =================== Formulář pro vyhledávání na webu. Například do hlavičky nebo sloupce eshopu. .. csv-table:: Atributy formuláře **search-form** :header: "Atribut", "Povinný", "Popis" img-format, *ne*, rozměr obrázku pro našeptávač min-length, *ne*, Počet znaků pro zobrazení našeptávače. Defaultní hodnota `3` template, *ne*, název TPL souboru ze složky s šablonou výsledků (ze složky ajax, bez koncovky) .. code-block:: html+twig {# minimální zápis #} .. code-block:: html+twig {# vlastní zápis #} .. code-block:: html+twig {# obrázky pro našeptávač #} .. code-block:: html+twig {# autofocus zobrazení vyhledávání #} .. code-block:: html+twig {# autocomplete #} Příklad generovaného výstupu při minimální zápisu (**může se změnit!**). Například *name* inputu se mění podle aktuálního jazyka, takže podle něj nejde nastavit javascript nebo CSS. .. code-block:: html
Šablona výsledků """""""""""""""" V souboru ajax/search.tpl (pokud není určeno atributem *template* jinak) se definuje šablona pro zobrazené výsledky hledání. Jedinou proměnnou je **q** obsahující hledano frázi. V šabloně je možné vypsat produkty, kategorie, značky, bannery, ... Šablona výsledků musí mít každý odkaz (produkt, kategorii, ...) označený atributem tabindex, aby správně fungovalo ovládání přes klávesnici. Každý odkaz by také měl mít atribut data-result-type s hodnotou odpovídající typu výsledku (product, category, brand, more, ...) pro vyhodnocování úspěšnosti hledání. V CSS je potřeba nastylovat třídu *search-current-item*, která se nastaví položce s focusem při procházení klávesami. .. code-block:: html+twig {# Použití v šabloně /ajax/search.tpl #} {% if q is empty %}
... Empty search ...
{% else %} {% set categories = repository.category.findBy({'search': q, 'limit': 6}) %} {% if categories is not empty %}
{% endif %} {% endif %} ======================= Přihlášení k newsleteru ======================= Jednoduchý formulář pro přihlášení k newsletteru. .. csv-table:: Pole formuláře **newsletter-signup** :header: "data-role", "Povinný", "Popis" **email**, **ano**, adresa k přihlášení first_name, *ne*, křestní jméno last_name, *ne*, příjmení street, *ne*, ulice city, *ne*, příjmení zip, *ne*, PSČ country, *ne*, "stát (*cz, sk, ...*)" *source*, *ne*, *zdroj novinek* *gender*, *ne*, *pohlaví (m nebo f)* .. csv-table:: Atributy formuláře **newsletter-signup** :header: "Atribut", "Povinný", "Popis" redirect, *ne*, cílová URL autohide, *ne*, skrýt celý formulář u přihlášeného zákazníka ignore-duplicated, *ne*, ignorovat duplicitní registraci (atribut bez hodnoty) confirm-template, *ne*, ID šablony pro email s potvrzením přidání discount, *ne*, ID slevové sady pro přiřazení slevového kódu (nebo více ID oddělených čárkou) Pole *source* se používá jen ve specifických případech například při využití můstku pro napojení na externí systém. Při použití atributu *discount* je zákazníkovi odeslán slevový kód ze zvolené sady a pro text emailu se použije šablona dle *confirm-template*. V šabloně emailu se slevový kód vypíše značkou *{{discountCode}}*. Při použití více kódů obsahuje *{{discountCode}}* všechny kódy, nebo je možné použít pole *discountCodes*, které obsahuje klíče podle ID sady a hodnota je slevový kód. Minimální zápis """"""""""""""" .. code-block:: html+twig {# label přes atribut #} {# label obyčejně #} .. code-block:: html
Kompletní """"""""" .. code-block:: html+twig .. code-block:: html
Vlastní HTML """""""""""" .. code-block:: html+twig

Registrujte se ještě dnes!

.. code-block:: html

Registrujte se ještě dnes!

==================================================== Získání souhlasu ke zpracování osobních údajů (GDPR) ==================================================== Používá se v rámci jiných formulářů (registrace, přihlášení k newsletteru, objednávka, ...) pro doplnění zatržítka pro soouhlas se zpracováním údajů nebo jen pro zobrazení informačního textu. Vygenerování textu a zatržítka probíhá na pozadí a lze ovlivnit pouze obalový div. .. csv-table:: Atributy formuláře **gdpr-form** :header: "Atribut", "Povinný", "Popis" codes, *ne*, kódy formulářů k vypsání oddělené čárkou context, *ne*, ruční nastavení kontextu (*cart-sign-up*, *footer*, *sidebar*) list, *ne*, vypsat jako *li* bez obalového divu (bez hodnoty) .. code-block:: html+twig Pokud není uveden atribut "codes", tak se GDPR formuláře doplní podle kontextu automaticky. Ve většině případů se bude spoléhat na automatické doplnění, protože s ním jde vzhled ovládat z administrace. ==== Menu ==== V základním použití jen organizuje použivání menu a nepřidává žádnou funkci. S parametrem **lazy** ale umožňuje asynchronní načítání menu a výrazně zrychluje web aniž by návštěvník poznal rozdíl. Parametrem *lazy* v tpl menu se určí, která část menu se načítá asynchronně. Vždy to je ta část menu, která není okamžitě vidět. V html eshopu tato část menu nebude načítána a bude se načítat ajaxem. TPL menu musí fungovat nezásvisle na umístění - není možné zohledňovat kategorii nebo URL, protože se menu cachuje. Je možné používát třídy pro zvýraznění aktivní kategorie, ale pouze přes speciální zápis *{{ active_menu_placeholder_class('active', category) }}* - ten zajistí nahrazování třídy v cachovaném výstupu. Třída může být libovolná. Kromě kategorie je možné použít také typ stránky - například "Vypis/Slevy" Vložení menu na místo: .. code-block:: html+twig Definice menu (vždy v souboru *_menu.tpl*) .. code-block:: html+twig Pokud není uveden atribut "codes", tak se GDPR formuláře doplní podle kontextu automaticky. Ve většině případů se bude spoléhat na automatické doplnění, protože s ním jde vzhled ovládat z administrace.