Nette Documentation Preview

syntax
Migrace z Twigu do Latte
************************

.[perex]
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].

Tento užitečný nástroj je dostupný dvěma způsoby:

1. Stažením z [GitHubu|https://github.com/nette/latte-tools]
2. Instalací pomocí Composeru:

```shell
composer create-project latte/tools
```

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í.

Pro převod z Twigu do Latte použijte skript `twig-to-latte.php`:

```shell
twig-to-latte.php input.twig.html [output.latte]
```


Konverze a její specifika
-------------------------

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`.

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.


Příklad použití
---------------

Podívejme se na konkrétní příklad. Níže je ukázka vstupního Twig souboru:

```twig
{% use "blocks.twig" %}
<!DOCTYPE html>
<html>
	<head>
		<title>{{ block("title") }}</title>
	</head>
	<body>
		<h1>{% block title %}My Web{% endblock %}</h1>
		<ul id="navigation">
		{% for item in navigation %}
			{% if not item.active %}
				<li>{{ item.caption }}</li>
			{% else %}
				<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
			{% endif %}
		{% endfor %}
		</ul>
	</body>
</html>
```

Po konverzi do Latte získáme následující šablonu:

```latte
{import 'blocks.latte'}
<!DOCTYPE html>
<html>
	<head>
		<title>{include title}</title>
	</head>
	<body>
		<h1>{block title}My Web{/block}</h1>
		<ul id="navigation">
		{foreach $navigation as $item}
			{if !$item->active}
				<li>{$item->caption}</li>
			{else}
				<li><a href="{$item->href}">{$item->caption}</a></li>
			{/if}
		{/foreach}
		</ul>
	</body>
</html>
```

Hlavní rozdíly a výhody po převodu:

1. **Změna syntaxe**: Twig používá `{% ... %}` pro logiku a `{{ ... }}` pro výpis, zatímco Latte používá jednotnou `{ ... }` syntaxi
2. **Bloky**: `{% block ... %}` se mění na `{block ...}`
3. **Cykly**: `{% for ... %}` se převádí na `{foreach ...}`
4. **Podmínky**: `{% if ... %}` zůstává podobné, ale používá se `{if ...}`.
5. **Přístup k proměnným**: Tečková notace `item.caption` se mění na objektovou notaci `$item->caption`
6. **Import**: `{% use ... %}` se mění na `{import ...}`

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.

{{leftbar: /@left-menu}}

Migrace z Twigu do Latte

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.

Tento užitečný nástroj je dostupný dvěma způsoby:

  1. Stažením z GitHubu
  2. Instalací pomocí Composeru:
composer create-project latte/tools

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í.

Pro převod z Twigu do Latte použijte skript twig-to-latte.php:

twig-to-latte.php input.twig.html [output.latte]

Konverze a její specifika

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.

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.

Příklad použití

Podívejme se na konkrétní příklad. Níže je ukázka vstupního Twig souboru:

{% use "blocks.twig" %}
<!DOCTYPE html>
<html>
	<head>
		<title>{{ block("title") }}</title>
	</head>
	<body>
		<h1>{% block title %}My Web{% endblock %}</h1>
		<ul id="navigation">
		{% for item in navigation %}
			{% if not item.active %}
				<li>{{ item.caption }}</li>
			{% else %}
				<li><a href="{{ item.href }}">{{ item.caption }}</a></li>
			{% endif %}
		{% endfor %}
		</ul>
	</body>
</html>

Po konverzi do Latte získáme následující šablonu:

{import 'blocks.latte'}
<!DOCTYPE html>
<html>
	<head>
		<title>{include title}</title>
	</head>
	<body>
		<h1>{block title}My Web{/block}</h1>
		<ul id="navigation">
		{foreach $navigation as $item}
			{if !$item->active}
				<li>{$item->caption}</li>
			{else}
				<li><a href="{$item->href}">{$item->caption}</a></li>
			{/if}
		{/foreach}
		</ul>
	</body>
</html>

Hlavní rozdíly a výhody po převodu:

  1. Změna syntaxe: Twig používá {% ... %} pro logiku a {{ ... }} pro výpis, zatímco Latte používá jednotnou { ... } syntaxi
  2. Bloky: {% block ... %} se mění na {block ...}
  3. Cykly: {% for ... %} se převádí na {foreach ...}
  4. Podmínky: {% if ... %} zůstává podobné, ale používá se {if ...}.
  5. Přístup k proměnným: Tečková notace item.caption se mění na objektovou notaci $item->caption
  6. Import: {% use ... %} se mění na {import ...}

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.