Nette Documentation Preview

syntax
Συμβουλές και κόλπα
*******************


Επεξεργαστές και IDE .[#toc-editors-and-ide]
============================================

Γράψτε πρότυπα σε έναν επεξεργαστή ή IDE που έχει υποστήριξη για Latte. Θα είναι πολύ πιο ευχάριστο.

- Το NetBeans IDE έχει ενσωματωμένη υποστήριξη
- PhpStorm: εγκαταστήστε το [πρόσθετο Latte |https://plugins.jetbrains.com/plugin/7457-latte] στο `Settings > Plugins > Marketplace`
- VS Code: αναζήτηση markerplace για [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] ή [Nette Latte templates |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] plugin
- Sublime Text 3: στο Package Control βρείτε και εγκαταστήστε το πακέτο `Nette` και επιλέξτε Latte στο `View > Syntax`
- σε παλιούς επεξεργαστές χρησιμοποιήστε την επισήμανση Smarty για τα αρχεία .latte

Το πρόσθετο για το PhpStorm είναι πολύ προηγμένο και μπορεί να προτείνει τέλεια κώδικα PHP. Για να λειτουργήσει βέλτιστα, χρησιμοποιήστε [τυποποιημένα πρότυπα |type-system].

[* latte-phpstorm-plugin.webp *]

Υποστήριξη για το Latte μπορεί επίσης να βρεθεί στον web code highlighter [Prism.js |https://prismjs.com/#supported-languages] και στον επεξεργαστή [Ace |https://ace.c9.io].


Latte μέσα σε JavaScript ή CSS .[#toc-latte-inside-javascript-or-css]
=====================================================================

Το Latte μπορεί να χρησιμοποιηθεί πολύ άνετα μέσα σε JavaScript ή CSS. Αλλά πώς να αποφύγετε το Latte να θεωρεί λανθασμένα τον κώδικα JavaScript ή το στυλ CSS ως ετικέτα Latte;

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

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

**Επιλογή 1**

Αποφύγετε τις περιπτώσεις όπου ένα γράμμα ακολουθεί αμέσως μετά από ένα `{`, είτε εισάγοντας ένα κενό, ένα διάλειμμα γραμμής ή ένα εισαγωγικό μεταξύ τους:

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

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

**Επιλογή 2**

Πλήρης απενεργοποίηση της επεξεργασίας των ετικετών Latte μέσα σε ένα στοιχείο που χρησιμοποιεί [n:syntax |tags#syntax]:

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

**Επιλογή 3**

Αλλάξτε τη σύνταξη της ετικέτας Latte σε διπλές αγκύλες μέσα στο στοιχείο:

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

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

Στην JavaScript, [μην βάζετε τη μεταβλητή μέσα σε εισαγωγικά |tags#Printing in JavaScript].


Αντικατάσταση της ρήτρας `use` .[#toc-replacement-for-use-clause]
=================================================================

Πώς να αντικαταστήσετε τις ρήτρες `use` που χρησιμοποιούνται στην PHP, ώστε να μην χρειάζεται να γράψετε ένα namespace όταν έχετε πρόσβαση σε μια κλάση; Παράδειγμα PHP:

```php
use Pets\Model\Dog;

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

**Επιλογή 1**

Αντί της ρήτρας `use` αποθηκεύστε το όνομα της κλάσης σε μια μεταβλητή και στη συνέχεια αντί της `Dog` χρησιμοποιήστε την `$Dog`:

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

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

**Επιλογή 2**

Εάν το αντικείμενο `$dog` είναι μια περίπτωση του `Pets\Model\Dog`, τότε μπορεί να χρησιμοποιηθεί το `{if $dog->status === $dog::StatusHungry}`.


Παραγωγή XML στο Latte .[#toc-generating-xml-in-latte]
======================================================

Το Latte μπορεί να παράγει οποιαδήποτε μορφή κειμένου (HTML, XML, CSV, iCal, κ.λπ.), ωστόσο, για να ξεφύγει σωστά από τα εμφανιζόμενα δεδομένα, πρέπει να του πούμε ποια μορφή παράγουμε. Το [`{contentType}` |tags#contentType] χρησιμοποιείται για το σκοπό αυτό.

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

Στη συνέχεια, για παράδειγμα, μπορούμε να δημιουργήσουμε ένα sitemap με παρόμοιο τρόπο:

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


Πέρασμα δεδομένων από ένα συμπεριλαμβανόμενο πρότυπο .[#toc-passing-data-from-an-included-template]
===================================================================================================

Οι μεταβλητές που δημιουργούμε με το `{var}` ή το `{default}` στο συμπεριλαμβανόμενο πρότυπο υπάρχουν μόνο σε αυτό και δεν είναι διαθέσιμες στο συμπεριλαμβανόμενο πρότυπο.
Αν θέλουμε να περάσουμε κάποια δεδομένα από το συμπεριλαμβανόμενο πρότυπο πίσω στο συμπεριλαμβανόμενο, μια από τις επιλογές είναι να περάσουμε ένα αντικείμενο στο πρότυπο και να ορίσουμε τα δεδομένα σε αυτό.

Κύριο πρότυπο:

```latte
{* δημιουργεί ένα κενό αντικείμενο $vars *}
{var $vars = (object) null}

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

{* περιέχει τώρα την ιδιότητα foo *}
{$vars->foo}
```

 `included.latte`:

```latte
{* εγγραφή δεδομένων στην ιδιότητα foo *}
{var $vars->foo = 123}
```

Συμβουλές και κόλπα

Επεξεργαστές και IDE

Γράψτε πρότυπα σε έναν επεξεργαστή ή IDE που έχει υποστήριξη για Latte. Θα είναι πολύ πιο ευχάριστο.

  • Το NetBeans IDE έχει ενσωματωμένη υποστήριξη
  • PhpStorm: εγκαταστήστε το πρόσθετο Latte στο Settings > Plugins > Marketplace
  • VS Code: αναζήτηση markerplace για Nette Latte + Neon ή Nette Latte templates plugin
  • Sublime Text 3: στο Package Control βρείτε και εγκαταστήστε το πακέτο Nette και επιλέξτε Latte στο View > Syntax
  • σε παλιούς επεξεργαστές χρησιμοποιήστε την επισήμανση Smarty για τα αρχεία .latte

Το πρόσθετο για το PhpStorm είναι πολύ προηγμένο και μπορεί να προτείνει τέλεια κώδικα PHP. Για να λειτουργήσει βέλτιστα, χρησιμοποιήστε τυποποιημένα πρότυπα.

Υποστήριξη για το Latte μπορεί επίσης να βρεθεί στον web code highlighter Prism.js και στον επεξεργαστή Ace.

Latte μέσα σε JavaScript ή CSS

Το Latte μπορεί να χρησιμοποιηθεί πολύ άνετα μέσα σε JavaScript ή CSS. Αλλά πώς να αποφύγετε το Latte να θεωρεί λανθασμένα τον κώδικα JavaScript ή το στυλ CSS ως ετικέτα Latte;

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

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

Επιλογή 1

Αποφύγετε τις περιπτώσεις όπου ένα γράμμα ακολουθεί αμέσως μετά από ένα {, είτε εισάγοντας ένα κενό, ένα διάλειμμα γραμμής ή ένα εισαγωγικό μεταξύ τους:

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

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

Επιλογή 2

Πλήρης απενεργοποίηση της επεξεργασίας των ετικετών Latte μέσα σε ένα στοιχείο που χρησιμοποιεί n:syntax:

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

Επιλογή 3

Αλλάξτε τη σύνταξη της ετικέτας Latte σε διπλές αγκύλες μέσα στο στοιχείο:

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

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

Στην JavaScript, μην βάζετε τη μεταβλητή μέσα σε εισαγωγικά.

Αντικατάσταση της ρήτρας use

Πώς να αντικαταστήσετε τις ρήτρες use που χρησιμοποιούνται στην PHP, ώστε να μην χρειάζεται να γράψετε ένα namespace όταν έχετε πρόσβαση σε μια κλάση; Παράδειγμα PHP:

use Pets\Model\Dog;

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

Επιλογή 1

Αντί της ρήτρας use αποθηκεύστε το όνομα της κλάσης σε μια μεταβλητή και στη συνέχεια αντί της Dog χρησιμοποιήστε την $Dog:

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

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

Επιλογή 2

Εάν το αντικείμενο $dog είναι μια περίπτωση του Pets\Model\Dog, τότε μπορεί να χρησιμοποιηθεί το {if $dog->status === $dog::StatusHungry}.

Παραγωγή XML στο Latte

Το Latte μπορεί να παράγει οποιαδήποτε μορφή κειμένου (HTML, XML, CSV, iCal, κ.λπ.), ωστόσο, για να ξεφύγει σωστά από τα εμφανιζόμενα δεδομένα, πρέπει να του πούμε ποια μορφή παράγουμε. Το {contentType} χρησιμοποιείται για το σκοπό αυτό.

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

Στη συνέχεια, για παράδειγμα, μπορούμε να δημιουργήσουμε ένα sitemap με παρόμοιο τρόπο:

{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>

Πέρασμα δεδομένων από ένα συμπεριλαμβανόμενο πρότυπο

Οι μεταβλητές που δημιουργούμε με το {var} ή το {default} στο συμπεριλαμβανόμενο πρότυπο υπάρχουν μόνο σε αυτό και δεν είναι διαθέσιμες στο συμπεριλαμβανόμενο πρότυπο. Αν θέλουμε να περάσουμε κάποια δεδομένα από το συμπεριλαμβανόμενο πρότυπο πίσω στο συμπεριλαμβανόμενο, μια από τις επιλογές είναι να περάσουμε ένα αντικείμενο στο πρότυπο και να ορίσουμε τα δεδομένα σε αυτό.

Κύριο πρότυπο:

{* δημιουργεί ένα κενό αντικείμενο $vars *}
{var $vars = (object) null}

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

{* περιέχει τώρα την ιδιότητα foo *}
{$vars->foo}

included.latte:

{* εγγραφή δεδομένων στην ιδιότητα foo *}
{var $vars->foo = 123}