You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: best-practices/cs/lets-create-contact-form.texy
+1-1
Original file line number
Diff line number
Diff line change
@@ -131,7 +131,7 @@ Zatím se odesílá prostý textový email obsahující pouze zprávu odeslanou
131
131
</html>
132
132
```
133
133
134
-
Zbývá upravit `ContactFacade`, aby tuto šablonu používal. V konstruktoru si vyžádáme třídu `LatteFactory`, která umí vyrobit objekt `Latte\Engine`, tedy [vykreslovač Latte šablon |latte:develop#jak-vykreslit-sablonu]. Pomocí metody `renderToString()` šablonu vykreslíme do souboru, prvním parametrem je cesta k šabloně a druhým jsou proměnné.
134
+
Zbývá upravit `ContactFacade`, aby tuto šablonu používal. V konstruktoru si vyžádáme třídu `LatteFactory`, která umí vyrobit objekt `Latte\Engine`, tedy [vykreslovač Latte šablon |latte:develop#vykresleni-sablony]. Pomocí metody `renderToString()` šablonu vykreslíme do souboru, prvním parametrem je cesta k šabloně a druhým jsou proměnné.
Copy file name to clipboardExpand all lines: latte/cs/cookbook/how-to-write-sql-queries-in-latte.texy
+26-6
Original file line number
Diff line number
Diff line change
@@ -2,9 +2,9 @@ Jak psát SQL queries v Latte?
2
2
*****************************
3
3
4
4
.[perex]
5
-
Latte se může hodit i pro generování opravdu složitých SQL dotazů.
5
+
Latte může být užitečným nástrojem i pro generování komplexních SQL dotazů, což zvyšuje jejich čitelnost a udržovatelnost.
6
6
7
-
Pokud vytvoření SQL dotazu obsahuje řadu podmínek a proměnných, může být opravdu přehlednější ho napsat v Latte. Velmi jednoduchý příklad:
7
+
Když SQL dotaz obsahuje mnoho podmínek a proměnných, může být jeho zápis v Latte přehlednější a flexibilnější. Zde je jednoduchý příklad demonstrující tuto výhodu:
8
8
9
9
```latte
10
10
SELECT users.* FROM users
@@ -14,8 +14,13 @@ SELECT users.* FROM users
14
14
WHERE groups.name = 'Admins' {ifset $country} AND country.name = {$country} {/ifset}
15
15
```
16
16
17
-
Pomocí `$latte->setContentType()` řekneme Latte, aby k obsahu přistupovalo jako k prostému textu (nikoliv jako k HTML) a dále
18
-
připravíme escapovací funkci, která bude řetězce escapovat přímo databázovým driverem:
17
+
Pro správné fungování je třeba provést několik kroků:
18
+
19
+
1. Nastavení typu obsahu: pomocí `$latte->setContentType()` informujeme Latte, že obsah má být zpracován jako prostý text, nikoliv jako HTML.
20
+
21
+
2. Definice escapovací funkce: vytvoříme vlastní escapovací funkci, která bude řetězce escapovat přímo pomocí databázového driveru. Tím zajistíme bezpečnost proti SQL injection.
22
+
23
+
Zde je ukázka implementace těchto kroků:
19
24
20
25
```php
21
26
$db = new PDO(/* ... */);
@@ -31,13 +36,28 @@ $latte->addFilter('escape', fn($val) => match (true) {
31
36
});
32
37
```
33
38
34
-
Použití by vypadalo takto:
39
+
Tato escapovací funkce zajišťuje správné ošetření různých datových typů:
40
+
- Řetězce jsou escapovány pomocí metody `quote()` databázového driveru.
41
+
- Čísla (celá i s plovoucí desetinnou čárkou) jsou převedena na řetězce.
42
+
- Booleovské hodnoty jsou převedeny na '1' nebo '0'.
*Uvedený příklad vyžaduje Latte v3.0.5 nebo vyšší.*
53
+
Tento přístup umožňuje:
54
+
1. Dynamické sestavování SQL dotazů s využitím logiky Latte.
55
+
2. Bezpečné vkládání proměnných do dotazu díky vlastní escapovací funkci.
56
+
3. Lepší čitelnost a udržovatelnost komplexních SQL dotazů.
57
+
58
+
.[note]
59
+
Tento příklad vyžaduje Latte ve verzi 3.0.5 nebo novější.
60
+
61
+
Využití Latte pro generování SQL dotazů může výrazně zjednodušit práci s komplexními dotazy, zejména v situacích, kdy se dotaz dynamicky mění na základě různých podmínek. Zároveň tento přístup pomáhá udržet kód čistý a snadno upravitelný.
Copy file name to clipboardExpand all lines: latte/cs/cookbook/migration-from-php.texy
+20-8
Original file line number
Diff line number
Diff line change
@@ -2,27 +2,30 @@ Migrace z PHP do Latte
2
2
**********************
3
3
4
4
.[perex]
5
-
Převádíte starý projekt napsaný v čistém PHP do Latte? Máme pro vás nástroj, které vám migraci usnadní. [Vyzkoušejte jej online |https://php2latte.nette.org].
5
+
Převádíte starší projekt napsaný v čistém PHP na Latte? Máme pro vás nástroj, který tento proces výrazně zjednoduší. [Vyzkoušejte jej online |https://php2latte.nette.org].
6
6
7
-
Nástroj si můžete stáhnout z [GitHubu|https://github.com/nette/latte-tools] nebo nainstalovat pomocí Composeru:
7
+
Tento užitečný nástroj můžete získat dvěma způsoby:
8
+
9
+
1. Stáhnout z [GitHubu|https://github.com/nette/latte-tools]
10
+
2. Nainstalovat pomocí Composeru:
8
11
9
12
```shell
10
13
composer create-project latte/tools
11
14
```
12
15
13
-
Převodník nepoužívá jednoduché záměny pomocí regulárních výrazů, naopak využívá přímo PHP parser, takže si poradí s jakkoliv složitou syntaxí.
16
+
Na rozdíl od jednoduchých nástrojů využívajících regulární výrazy, tento převodník používá sofistikovaný PHP parser. Díky tomu si poradí i s komplexní PHP syntaxí.
14
17
15
-
K převodu z PHP do Latte slouží skript `php-to-latte.php`:
18
+
Pro převod z PHP do Latte použijte skript `php-to-latte.php`:
16
19
17
20
```shell
18
21
php-to-latte.php input.php [output.latte]
19
22
```
20
23
21
24
22
-
Příklad
23
-
-------
25
+
Příklad použití
26
+
---------------
24
27
25
-
Vstupní soubor může vypadat třeba takto (jde o část kódu fóra PunBB):
28
+
Podívejme se na konkrétní příklad. Níže je ukázka vstupního PHP souboru (část kódu fóra PunBB):
4. **Zjednodušení**: Odstraňuje nutnost explicitního výpisu pomocí `echo`.
81
+
82
+
Tento nástroj významně urychluje a zjednodušuje proces migrace z PHP na Latte, což vám umožní rychleji modernizovat vaše projekty a využít všech výhod, které Latte nabízí.
Copy file name to clipboardExpand all lines: latte/cs/cookbook/migration-from-twig.texy
+27-13
Original file line number
Diff line number
Diff line change
@@ -2,37 +2,40 @@ Migrace z Twigu do Latte
2
2
************************
3
3
4
4
.[perex]
5
-
Převádíte projekt napsaný v Twigu do modernějšího Latte? Máme pro vás nástroj, které vám migraci usnadní. [Vyzkoušejte jej online |https://twig2latte.nette.org].
5
+
Převádíte projekt z Twigu na modernější a mnohem bezpečnější Latte? Máme pro vás nástroj, který tento proces výrazně zjednoduší. [Vyzkoušejte jej online |https://twig2latte.nette.org].
6
6
7
-
Nástroj si můžete stáhnout z [GitHubu|https://github.com/nette/latte-tools] nebo nainstalovat pomocí Composeru:
7
+
Tento užitečný nástroj je dostupný dvěma způsoby:
8
+
9
+
1. Stažením z [GitHubu|https://github.com/nette/latte-tools]
10
+
2. Instalací pomocí Composeru:
8
11
9
12
```shell
10
13
composer create-project latte/tools
11
14
```
12
15
13
-
Převodník nepoužívá jednoduché záměny pomocí regulárních výrazů, naopak využívá přímo Twig parser, takže si poradí s jakkoliv složitou syntaxí.
16
+
Na rozdíl od jednoduchých nástrojů využívajících regulární výrazy, tento převodník používá sofistikovaný Twig parser. Díky tomu si poradí i s komplexní Twig syntaxí.
14
17
15
-
K převodu z Twigu do Latte slouží skript `twig-to-latte.php`:
18
+
Pro převod z Twigu do Latte použijte skript `twig-to-latte.php`:
16
19
17
20
```shell
18
21
twig-to-latte.php input.twig.html [output.latte]
19
22
```
20
23
21
24
22
-
Konverze
23
-
--------
25
+
Konverze a její specifika
26
+
-------------------------
24
27
25
-
Převod předpokládá ruční úpravu výsledku, protože konverzi nelze provést jednoznačně. Twig používá tečkovou syntax, kde `{{ a.b }}` může znamenat `$a->b`, `$a['b']` nebo `$a->getB()`, což nelze rozlišit při kompilaci. Převaděč proto vše převádí na `$a->b`.
28
+
Je důležité poznamenat, že převod může vyžadovat ruční úpravy výsledku. Důvodem je, že některé konstrukce v Twigu nelze jednoznačně převést do Latte. Například, Twig používá tečkovou syntax, kde `{{ a.b }}` může znamenat `$a->b`, `$a['b']` nebo `$a->getB()`. Tento rozdíl nelze rozlišit při kompilaci, proto převaděč vše převádí na `$a->b`.
26
29
27
-
Některé funkce, filtry nebo tagy nemají obdobu v Latte, nebo se mohou chovat mírně jinak.
30
+
Některé funkce, filtry nebo tagy v Twigu nemají přímou obdobu v Latte, nebo se mohou chovat mírně odlišně. To je další důvod, proč může být potřeba ruční úprava po automatickém převodu.
28
31
29
32
30
-
Příklad
31
-
-------
33
+
Příklad použití
34
+
---------------
32
35
33
-
Vstupní soubor může vypadat třeba takto:
36
+
Podívejme se na konkrétní příklad. Níže je ukázka vstupního Twig souboru:
34
37
35
-
```latte
38
+
```twig
36
39
{% use "blocks.twig" %}
37
40
<!DOCTYPE html>
38
41
<html>
@@ -54,7 +57,7 @@ Vstupní soubor může vypadat třeba takto:
54
57
</html>
55
58
```
56
59
57
-
Po konverzi do Latte získáme tuto šablonu:
60
+
Po konverzi do Latte získáme následující šablonu:
58
61
59
62
```latte
60
63
{import 'blocks.latte'}
@@ -78,4 +81,15 @@ Po konverzi do Latte získáme tuto šablonu:
78
81
</html>
79
82
```
80
83
84
+
Hlavní rozdíly a výhody po převodu:
85
+
86
+
1. **Změna syntaxe**: Twig používá `{% ... %}` pro logiku a `{{ ... }}` pro výpis, zatímco Latte používá jednotnou `{ ... }` syntaxi
87
+
2. **Bloky**: `{% block ... %}` se mění na `{block ...}`
88
+
3. **Cykly**: `{% for ... %}` se převádí na `{foreach ...}`
89
+
4. **Podmínky**: `{% if ... %}` zůstává podobné, ale používá se `{if ...}`.
90
+
5. **Přístup k proměnným**: Tečková notace `item.caption` se mění na objektovou notaci `$item->caption`
91
+
6. **Import**: `{% use ... %}` se mění na `{import ...}`
92
+
93
+
Tento nástroj významně urychluje a zjednodušuje proces migrace z Twigu na Latte. Umožňuje vám rychle modernizovat vaše projekty a využít všech výhod, které Latte nabízí, včetně jeho výkonu a flexibilnity. Nezapomeňte však po automatickém převodu zkontrolovat a případně upravit výsledný kód, aby plně odpovídal vašim potřebám a specifikům vašeho projektu.
Copy file name to clipboardExpand all lines: latte/cs/cookbook/passing-variables.texy
+15-13
Original file line number
Diff line number
Diff line change
@@ -1,14 +1,14 @@
1
1
Předávání proměnných napříč šablonami
2
2
*************************************
3
3
4
-
Tento průvodce vám vysvětlí, jak se proměnné předávají mezi šablonami v Latte pomocí různých tagů jako `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` a dalších. Dozvíte se také, jak pracovat s proměnnými v tagu `{block}` a `{define}`, a k čemu slouží značka `{parameters}`.
4
+
Tento průvodce objasňuje, jak se v Latte předávají proměnné mezi šablonami pomocí různých tagů jako `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` a dalších. Dozvíte se také, jak pracovat s proměnnými v tagu `{block}` a `{define}`, a k čemu slouží značka `{parameters}`.
5
5
6
6
7
7
Typy proměnných
8
8
---------------
9
-
Proměnné v Latte můžeme rozdělit do tří kategorií podle toho, jak a kde jsou definovány:
9
+
V Latte rozlišujeme tři kategorie proměnných podle jejich definice a dostupnosti:
10
10
11
-
**Vstupní proměnné** jsou ty, které jsou do šablony předávány zvenčí, například z PHP skriptu nebo pomocí tagu jako `{include}`.
11
+
**Vstupní proměnné** jsou předávány do šablony zvenčí, typicky z PHP skriptu nebo pomocí tagů jako `{include}`.
@@ -45,7 +45,7 @@ Tag `{block}` se používá k definování opakovaně použitelných bloků kód
45
45
46
46
`{define}`
47
47
----------
48
-
Tag `{define}` slouží k vytváření bloků, které se renderují až po jejich zavolání pomocí `{include}`. Proměnné dostupné uvnitř těchto bloků závisí na tom, zda jsou v definici uvedeny parametry. Pokud ano, přístup mají jen k těmto parametrům. Pokud ne, přístup mají ke všem vstupním proměnným šablony, ve které jsou bloky definovány.
48
+
Tag `{define}` vytváří bloky, které se renderují až po jejich explicitním zavolání pomocí `{include}`. Dostupnost proměnných uvnitř těchto bloků závisí na přítomnosti parametrů v definici. S parametry mají bloky přístup pouze k těmto parametrům. Bez parametrů mají přístup ke všem vstupním proměnným šablony, ve které jsou definovány.
49
49
50
50
```latte
51
51
{define hello}
@@ -60,7 +60,7 @@ Tag `{define}` slouží k vytváření bloků, které se renderují až po jejic
60
60
61
61
`{parameters}`
62
62
--------------
63
-
Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony. Tímto způsobem lze snadno dokumentovat očekávané proměnné a jejich datové typy. Také je možné definovat výchozí hodnoty.
63
+
Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony. Tímto způsobem lze efektivně dokumentovat očekávané proměnné a jejich datové typy. Umožňuje také definovat výchozí hodnoty.
64
64
65
65
```latte
66
66
{parameters int $age, string $name = 'neznámé'}
@@ -70,7 +70,7 @@ Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních pr
70
70
71
71
`{include file}`
72
72
----------------
73
-
Tag `{include file}` slouží k vložení celé šablony. Této šabloně se předávají jak vstupní proměnné šablony, ve které je značka použita, tak proměnné v ní explicitně definované. Cílová šablona ale může rozsah omezit pomocí `{parameters}`.
73
+
Tag `{include file}` vkládá celou šablonu. Do vkládané šablony se předávají vstupní proměnné šablony, ve které je značka použita, spolu s explicitně definovanými proměnnými. Cílová šablona může omezit rozsah přijímaných proměnných pomocí `{parameters}`.
74
74
75
75
```latte
76
76
{include 'profile.latte', userId: $user->id}
@@ -79,7 +79,7 @@ Tag `{include file}` slouží k vložení celé šablony. Této šabloně se př
79
79
80
80
`{include block}`
81
81
-----------------
82
-
Když vkládáte blok definovaný ve stejné šabloně, předávají se do něj všechny okolní a explicitně definované proměnné:
82
+
Při vkládání bloku definovaného ve stejné šabloněse do něj předávají všechny okolní a explicitně definované proměnné:
83
83
84
84
```latte
85
85
{define blockName}
@@ -90,9 +90,9 @@ Když vkládáte blok definovaný ve stejné šabloně, předávají se do něj
90
90
{include blockName}
91
91
```
92
92
93
-
V tomto příkladu se proměnné `$name` a `$age` předají do bloku `blockName`. Stejným způsobem se chová i `{include parent}`.
93
+
V tomto příkladu jsou proměnné `$name` a `$age` předány do bloku `blockName`. Stejně se chová i `{include parent}`.
94
94
95
-
Při vkládání bloku z jiné šablony jsou předávány pouze vstupní proměnné a explicitně definované. Okolní proměnné nejsou automaticky dostupné.
95
+
Při vkládání bloku z jiné šablony se předávají pouze vstupní proměnné a explicitně definované proměnné. Okolní proměnné nejsou automaticky dostupné.
@@ -101,7 +101,7 @@ Při vkládání bloku z jiné šablony jsou předávány pouze vstupní proměn
101
101
102
102
`{layout}` nebo `{extends}`
103
103
---------------------------
104
-
Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a dále proměnné vytvořené v kódu před bloky:
104
+
Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a proměnné vytvořené v kódu před bloky:
105
105
106
106
```latte
107
107
{layout 'layout.latte'}
@@ -134,15 +134,15 @@ Naopak v blocích uvnitř `{embed}` je přístup ke všem okolním proměnným:
134
134
{var $name = 'Jan'}
135
135
{embed 'menu.latte', items: $menuItems}
136
136
{block foo}
137
-
{$nam}
137
+
{$name}
138
138
{/block}
139
139
{/embed}
140
140
```
141
141
142
142
143
143
`{import}`
144
144
----------
145
-
Tag `{import}` se využívá pro načítání bloků z jiných šablon. Přenáší se jak vstupní, tak explicitně deklarované proměnné do importovaných bloků.
145
+
Tag `{import}` se používá pro načítání bloků z jiných šablon. Do importovaných bloků se předávají jak vstupní, tak explicitně deklarované proměnné.
146
146
147
147
```latte
148
148
{import 'buttons.latte'}
@@ -151,11 +151,13 @@ Tag `{import}` se využívá pro načítání bloků z jiných šablon. Přená
151
151
152
152
`{sandbox}`
153
153
-----------
154
-
Tag `{sandbox}` izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně.
154
+
Tag `{sandbox}` izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně, což zvyšuje kontrolu nad daty vstupujícími do izolovaného prostředí.
155
155
156
156
```latte
157
157
{sandbox 'secure.latte', data: $secureData}
158
158
```
159
159
160
+
Tento mechanismus umožňuje přesnou kontrolu nad tím, jaká data jsou dostupná v izolované šabloně, což je užitečné pro zpracování potenciálně nebezpečného obsahu.
0 commit comments