Přeskočit na obsah

Průvodce Handlebars

Frontmail šablony používají syntaxi Handlebars v HTML těle, textové verzi, předmětu i polích s příjemci. Frontmail spouští Handlebars v izolovaném, uzamčeném prostředí: existují jen helpery uvedené na této stránce, partialy nejsou k dispozici a každá hodnota se escapuje.

<p>Dobrý den, {{name}},</p>
<p>vaše rezervace na {{booking.date}} je potvrzená.</p> {{!-- vnořený objekt --}}
<p>{{default company "(bez firmy)"}}</p> {{!-- záložní hodnota --}}

Chybějící hodnota se vykreslí jako prázdný řetězec. Pro komentáře, které se do e-mailu nikdy nedostanou, použijte {{!-- … --}}.

{{#if newsletter}}
<p>Děkujeme za přihlášení k odběru!</p>
{{else}}
<p>K odběru se můžete přihlásit kdykoli.</p>
{{/if}}
{{#unless paid}}<p>Platba zatím nedorazila.</p>{{/unless}}
{{#if (eq topic "support")}}<p>Naše podpora vám odpoví do jednoho dne.</p>{{/if}}
{{#if (and vip (gt total 1000))}}<p>🎁 Doprava zdarma</p>{{/if}}
{{#if (or (eq country "CZ") (eq country "SK"))}}<p>Doprava zdarma</p>{{/if}}

{{#if}} považuje za nepravdu false, 0, "", null, chybějící hodnoty a prázdné seznamy.

Použijte parametr typu list s itemFields:

<table>
{{#each items}}
<tr>
<td>{{@index}}</td>
<td>{{title}}</td>
<td>{{qty}} × {{formatMoney price ../currency}}</td>
</tr>
{{else}}
<tr><td colspan="3">Žádné položky.</td></tr>
{{/each}}
</table>

Uvnitř {{#each}} je this aktuální položka, k dispozici jsou @index (od 0), @first a @last a ../ sahá do nadřazeného kontextu. {{#with customer}}…{{/with}} mění kontext a {{lookup map key}} čte dynamický klíč.

Helper Příklad Výsledek
formatDate value [style] [timeZone=…] [locale=…] {{formatDate arrival "long"}} October 1, 2026 / 1. října 2026
formatNumber value [decimals=n] {{formatNumber 1234.5 decimals=2}} 1,234.50 / 1 234,50
formatMoney amount currency [minor=true] {{formatMoney 49 "EUR"}} · {{formatMoney 4900 "EUR" minor=true}} €49.00 / 49,00 €
uppercase value {{uppercase code}} ABC123
lowercase value {{lowercase email}} jana@example.com
default value fallback… {{default nickname name "příteli"}} první neprázdná hodnota
eq a b · ne a b {{#if (eq status "paid")}} volná rovnost (1 se rovná "1")
gt a b · lt a b {{#if (gt qty 10)}} číselné porovnání
and a b … · or a b … · not a {{#if (and a (not b))}} booleovské operace (prázdné hodnoty jsou nepravda)
json value {{json items}} text JSON (escapovaný) – hodí se pro ladění
nl2br value {{nl2br message}} escapovaný text se zalomeními řádků převedenými na <br>

Styly formatDate: date, datetime, time, short, long, full, iso. Jazyk výstupu se řídí locale šablony; pro jednotlivé volání ho přepíšete pomocí locale="cs". Časy používají časové pásmo organizace, pokud nepředáte timeZone="Europe/Prague".

Volání jakéhokoli jiného helperu je chyba kompilace, kterou ukážou kontroly šablony.

Proměnná Hodnota
{{frontmail.message_id}} ID zprávy, např. msg_01J9Z3K7Q2 – hodí se jako referenční číslo.
{{frontmail.sent_at}} ISO časová značka vykreslení, např. 2026-09-24T10:11:05.000Z. Kombinujte s formatDate.
{{frontmail.origin}} Origin požadavku z prohlížeče (např. https://example.com), u odeslání ze serveru prázdný.

frontmail je rezervované jméno – parametr s tímto názvem definovat nelze.

Frontmail HTML-escapuje každý výstup, včetně zápisů {{{triple}}} a {{& ampersand}}. Návštěvník, který do formuláře napíše <a href="…">click</a>, uvidí v e-mailu přesně tento text, ne odkaz.

Když markup z parametrů opravdu potřebujete (například formátovaný text z vlastního CMS), deklarujte parametr s typem html. Jeho hodnota projde sanitizací podle allowlistu:

  • tagy: a, b, strong, i, em, u, s, p, br, div, span, h1–h6, ul, ol, li, blockquote, pre, code, hr, img, table a jeho části, small, sub, sup, center, font;
  • odkazy: http, https, mailto, tel; obrázky: http, https, cid;
  • inline styly: barvy, tloušťka/řez/velikost písma, výška řádku, zarovnání a dekorace textu, margin, padding, width, height, max-width;
  • všechno ostatní (skripty, iframy, formuláře, event handlery, URL javascript:) se odstraní.

Vykreslete ho obyčejným {{body_html}} – sanitizovaná hodnota se vypíše jako markup.

Automaticky generovaná textová verze vzniká z vykresleného HTML (odkazy se změní na text (url), tabulky na řádky). Pokud textovou verzi upravíte ručně, vykresluje se podle stejných pravidel Handlebars, jen bez HTML escapování.