Nette Documentation Preview

syntax
Tipps und Tricks
****************


Editoren und IDE .[#toc-editors-and-ide]
========================================

Schreiben Sie Vorlagen in einem Editor oder einer IDE, die Latte unterstützt. Es wird viel angenehmer sein.

- NetBeans IDE hat integrierte Unterstützung
- PhpStorm: Installieren Sie das [Latte-Plugin |https://plugins.jetbrains.com/plugin/7457-latte] in `Settings > Plugins > Marketplace`
- VS Code: suche markerplace für [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] oder [Nette Latte templates |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] plugin
- Sublime Text 3: in der Paketverwaltung das Paket `Nette` suchen und installieren und Latte in auswählen `View > Syntax`
- in alten Editoren Smarty-Hervorhebung für .latte-Dateien verwenden

Das Plugin für PhpStorm ist sehr fortschrittlich und kann perfekt PHP-Code vorschlagen. Um optimal zu arbeiten, verwenden Sie [getippte Vorlagen |type-system].

[* latte-phpstorm-plugin.webp *]

Unterstützung für Latte kann auch in der Web-Code-Highlighter [Prism.js |https://prismjs.com/#supported-languages] und Editor [Ace |https://ace.c9.io] gefunden werden.


Latte innerhalb von JavaScript oder CSS .[#toc-latte-inside-javascript-or-css]
==============================================================================

Latte kann sehr bequem innerhalb von JavaScript oder CSS verwendet werden. Aber wie lässt sich vermeiden, dass Latte JavaScript-Code oder CSS-Stil fälschlicherweise für ein Latte-Tag hält?

```latte
<style>
	/* ERROR: interprets as tag {color} */
	body {color: blue}
</style>

<script>
	// ERROR: interprets as tag {id}
	var obj = {id: 123};
</script>
```

**Option 1**

Vermeiden Sie Situationen, in denen ein Buchstabe unmittelbar auf ein "{" folgt, indem Sie entweder ein Leerzeichen, einen Zeilenumbruch oder ein Anführungszeichen dazwischen setzen:

```latte
<style>
	body {
		color: blue
	}
</style>

<script>
	var obj = {'id': 123};
</script>
```

**Option 2**

Die Verarbeitung von Latte-Tags innerhalb eines Elements mit [n:syntax |tags#syntax] vollständig abschalten:

```latte
<script n:syntax="off">
	var obj = {id: 123};
</script>
```

**Option 3**

Die Syntax des Latte-Tags auf doppelte geschweifte Klammern innerhalb des Elements umstellen:

```latte
<script n:syntax="double">
	var obj = {id: 123};          // this is JavaScript

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>
```

In JavaScript sollten Sie [Variablen nicht in Anführungszeichen setzen |tags#Printing in JavaScript].


Ersatz für `use` Klausel .[#toc-replacement-for-use-clause]
===========================================================

Wie kann man die in PHP verwendeten `use` Klauseln ersetzen, so dass man beim Zugriff auf eine Klasse keinen Namespace angeben muss? PHP-Beispiel:

```php
use Pets\Model\Dog;

if ($dog->status === Dog::StatusHungry) {
	// ...
}
```

**Option 1**

Anstelle der Klausel `use` den Klassennamen in einer Variablen speichern und dann anstelle von `Dog` `$Dog` verwenden:

```latte
{var $Dog = Pets\Model\Dog::class}

<div>
	{if $dog->status === $Dog::StatusHungry}
		...
	{/if}
</div>
```

**Option 2**

Wenn das Objekt `$dog` eine Instanz von `Pets\Model\Dog` ist, dann kann `{if $dog->status === $dog::StatusHungry}` verwendet werden.


XML-Erzeugung in Latte .[#toc-generating-xml-in-latte]
======================================================

Latte kann jedes beliebige Textformat (HTML, XML, CSV, iCal usw.) generieren. Um die angezeigten Daten jedoch richtig zu entschlüsseln, müssen wir ihm mitteilen, welches Format wir generieren wollen. Der [`{contentType}` |tags#contentType] Tag wird hierfür verwendet.

```latte
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
```

Dann können wir zum Beispiel eine Sitemap auf ähnliche Weise erstellen:

```latte
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" >
	<url n:foreach="$urls as $url">
		<loc>{$url->loc}</loc>
		<lastmod>{$url->lastmod->format('Y-m-d')}</lastmod>
		<changefreq>{$url->frequency}</changefreq>
		<priority>{$url->priority}</priority>
	</url>
</urlset>
```


Übergabe von Daten aus einer eingebundenen Vorlage .[#toc-passing-data-from-an-included-template]
=================================================================================================

Die Variablen, die wir mit `{var}` oder `{default}` in der eingebundenen Vorlage erstellen, existieren nur in dieser und sind in der einbindenden Vorlage nicht verfügbar.
Wenn wir einige Daten von der eingeschlossenen Vorlage an die einschließende Vorlage zurückgeben wollen, besteht eine der Möglichkeiten darin, ein Objekt an die Vorlage zu übergeben und die Daten darin zu speichern.

Hauptvorlage:

```latte
{* erzeugt ein leeres Objekt $vars *}
{var $vars = (object) null}

{include 'included.latte', vars: $vars}

{* enthält jetzt die Eigenschaft foo *}
{$vars->foo}
```

Enthaltene Vorlage `included.latte`:

```latte
{* Daten in die Eigenschaft foo schreiben *}
{var $vars->foo = 123}
```

Tipps und Tricks

Editoren und IDE

Schreiben Sie Vorlagen in einem Editor oder einer IDE, die Latte unterstützt. Es wird viel angenehmer sein.

  • NetBeans IDE hat integrierte Unterstützung
  • PhpStorm: Installieren Sie das Latte-Plugin in Settings > Plugins > Marketplace
  • VS Code: suche markerplace für Nette Latte + Neon oder Nette Latte templates plugin
  • Sublime Text 3: in der Paketverwaltung das Paket Nette suchen und installieren und Latte in auswählen View > Syntax
  • in alten Editoren Smarty-Hervorhebung für .latte-Dateien verwenden

Das Plugin für PhpStorm ist sehr fortschrittlich und kann perfekt PHP-Code vorschlagen. Um optimal zu arbeiten, verwenden Sie getippte Vorlagen.

Unterstützung für Latte kann auch in der Web-Code-Highlighter Prism.js und Editor Ace gefunden werden.

Latte innerhalb von JavaScript oder CSS

Latte kann sehr bequem innerhalb von JavaScript oder CSS verwendet werden. Aber wie lässt sich vermeiden, dass Latte JavaScript-Code oder CSS-Stil fälschlicherweise für ein Latte-Tag hält?

<style>
	/* ERROR: interprets as tag {color} */
	body {color: blue}
</style>

<script>
	// ERROR: interprets as tag {id}
	var obj = {id: 123};
</script>

Option 1

Vermeiden Sie Situationen, in denen ein Buchstabe unmittelbar auf ein „{“ folgt, indem Sie entweder ein Leerzeichen, einen Zeilenumbruch oder ein Anführungszeichen dazwischen setzen:

<style>
	body {
		color: blue
	}
</style>

<script>
	var obj = {'id': 123};
</script>

Option 2

Die Verarbeitung von Latte-Tags innerhalb eines Elements mit n:syntax vollständig abschalten:

<script n:syntax="off">
	var obj = {id: 123};
</script>

Option 3

Die Syntax des Latte-Tags auf doppelte geschweifte Klammern innerhalb des Elements umstellen:

<script n:syntax="double">
	var obj = {id: 123};          // this is JavaScript

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>

In JavaScript sollten Sie Variablen nicht in Anführungszeichen setzen.

Ersatz für use Klausel

Wie kann man die in PHP verwendeten use Klauseln ersetzen, so dass man beim Zugriff auf eine Klasse keinen Namespace angeben muss? PHP-Beispiel:

use Pets\Model\Dog;

if ($dog->status === Dog::StatusHungry) {
	// ...
}

Option 1

Anstelle der Klausel use den Klassennamen in einer Variablen speichern und dann anstelle von Dog $Dog verwenden:

{var $Dog = Pets\Model\Dog::class}

<div>
	{if $dog->status === $Dog::StatusHungry}
		...
	{/if}
</div>

Option 2

Wenn das Objekt $dog eine Instanz von Pets\Model\Dog ist, dann kann {if $dog->status === $dog::StatusHungry} verwendet werden.

XML-Erzeugung in Latte

Latte kann jedes beliebige Textformat (HTML, XML, CSV, iCal usw.) generieren. Um die angezeigten Daten jedoch richtig zu entschlüsseln, müssen wir ihm mitteilen, welches Format wir generieren wollen. Der {contentType} Tag wird hierfür verwendet.

{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...

Dann können wir zum Beispiel eine Sitemap auf ähnliche Weise erstellen:

{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" >
	<url n:foreach="$urls as $url">
		<loc>{$url->loc}</loc>
		<lastmod>{$url->lastmod->format('Y-m-d')}</lastmod>
		<changefreq>{$url->frequency}</changefreq>
		<priority>{$url->priority}</priority>
	</url>
</urlset>

Übergabe von Daten aus einer eingebundenen Vorlage

Die Variablen, die wir mit {var} oder {default} in der eingebundenen Vorlage erstellen, existieren nur in dieser und sind in der einbindenden Vorlage nicht verfügbar. Wenn wir einige Daten von der eingeschlossenen Vorlage an die einschließende Vorlage zurückgeben wollen, besteht eine der Möglichkeiten darin, ein Objekt an die Vorlage zu übergeben und die Daten darin zu speichern.

Hauptvorlage:

{* erzeugt ein leeres Objekt $vars *}
{var $vars = (object) null}

{include 'included.latte', vars: $vars}

{* enthält jetzt die Eigenschaft foo *}
{$vars->foo}

Enthaltene Vorlage included.latte:

{* Daten in die Eigenschaft foo schreiben *}
{var $vars->foo = 123}