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

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

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

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

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

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

Latte μέσα σε JavaScript ή CSS

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

<style>
	/* ΣΦΑΛΜΑ: ερμηνεύεται ως tag {color} */
	body {color: blue}
</style>

<script>
	// ΣΦΑΛΜΑ: ερμηνεύεται ως tag {id}
	var obj = {id: 123};
</script>

Επιλογή 1

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

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

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

Επιλογή 2

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

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

Επιλογή 3

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

<script n:syntax="double">
	var obj = {id: 123};          // αυτό είναι JavaScript

	{{if $cond}} alert(); {{/if}} // αυτό είναι Latte
</script>

Στη JavaScript δεν γράφονται εισαγωγικά γύρω από τη μεταβλητή.

Αντικατάσταση της δήλωσης use στο Latte

Πώς να αντικαταστήσετε τις δηλώσεις use στο Latte, οι οποίες χρησιμοποιούνται στην 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 κ.λπ.), ωστόσο, για να κάνει σωστά escape τα δεδομένα που εκτυπώνονται, πρέπει να του πούμε ποια μορφή δημιουργούμε. Για αυτό χρησιμοποιείται το tag {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}
έκδοση: 3.0