Πέρασμα Μεταβλητών Μεταξύ Προτύπων
Αυτός ο οδηγός εξηγεί πώς περνούν οι μεταβλητές μεταξύ των προτύπων
στο Latte χρησιμοποιώντας διάφορες ετικέτες όπως {include}
,
{import}
, {embed}
, {layout}
, {sandbox}
και άλλα. Θα μάθετε
επίσης πώς να εργάζεστε με μεταβλητές στις ετικέτες {block}
και
{define}
, και ποιος είναι ο σκοπός της ετικέτας {parameters}
.
Τύποι Μεταβλητών
Οι μεταβλητές στο Latte μπορούν να χωριστούν σε τρεις κατηγορίες ανάλογα με το πώς και πού ορίζονται:
Μεταβλητές Εισόδου είναι αυτές που περνούν στο πρότυπο από έξω,
για παράδειγμα, από ένα σενάριο PHP ή χρησιμοποιώντας μια ετικέτα όπως
το {include}
.
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);
Μεταβλητές Περιβάλλοντος είναι μεταβλητές που υπάρχουν στη θέση
μιας συγκεκριμένης ετικέτας. Περιλαμβάνουν όλες τις μεταβλητές
εισόδου και άλλες μεταβλητές που δημιουργούνται χρησιμοποιώντας
ετικέτες όπως {var}
, {default}
ή μέσα σε έναν βρόχο
{foreach}
.
{foreach $users as $user}
{include 'userBox.latte', user: $user}
{/foreach}
Ρητές Μεταβλητές είναι αυτές που καθορίζονται άμεσα μέσα σε μια ετικέτα και αποστέλλονται στο πρότυπο προορισμού.
{include 'userBox.latte', name: $user->name, age: $user->age}
{block}
Η ετικέτα {block}
χρησιμοποιείται για τον ορισμό
επαναχρησιμοποιήσιμων μπλοκ κώδικα που μπορούν να προσαρμοστούν ή να
επεκταθούν σε κληρονομούμενα πρότυπα. Οι μεταβλητές περιβάλλοντος που
ορίζονται πριν από το μπλοκ είναι διαθέσιμες μέσα στο μπλοκ, αλλά
οποιεσδήποτε αλλαγές στις μεταβλητές αντικατοπτρίζονται μόνο μέσα σε
αυτό το μπλοκ.
{var $foo = 'αρχικό'}
{block example}
{var $foo = 'αλλαγμένο'}
{/block}
{$foo} // εκτυπώνει: αρχικό
{define}
Η ετικέτα {define}
χρησιμοποιείται για τη δημιουργία μπλοκ που
αποδίδονται μόνο όταν καλούνται χρησιμοποιώντας το {include}
. Οι
μεταβλητές που είναι διαθέσιμες μέσα σε αυτά τα μπλοκ εξαρτώνται από
το αν καθορίζονται παράμετροι στον ορισμό. Αν ναι, έχουν πρόσβαση μόνο
σε αυτές τις παραμέτρους. Αν όχι, έχουν πρόσβαση σε όλες τις μεταβλητές
εισόδου του προτύπου στο οποίο ορίζονται τα μπλοκ.
{define hello}
{* έχει πρόσβαση σε όλες τις μεταβλητές εισόδου του προτύπου *}
{/define}
{define hello $name}
{* έχει πρόσβαση μόνο στην παράμετρο $name *}
{/define}
{parameters}
Η ετικέτα {parameters}
χρησιμοποιείται για τη ρητή δήλωση των
αναμενόμενων μεταβλητών εισόδου στην αρχή του προτύπου. Με αυτόν τον
τρόπο, μπορείτε εύκολα να τεκμηριώσετε τις αναμενόμενες μεταβλητές
και τους τύπους δεδομένων τους. Είναι επίσης δυνατό να ορίσετε
προεπιλεγμένες τιμές.
{parameters int $age, string $name = 'άγνωστο'}
<p>Ηλικία: {$age}, Όνομα: {$name}</p>
{include file}
Η ετικέτα {include file}
χρησιμοποιείται για την εισαγωγή ενός
ολόκληρου προτύπου. Τόσο οι μεταβλητές εισόδου του προτύπου στο οποίο
χρησιμοποιείται η ετικέτα, όσο και οι μεταβλητές που ορίζονται ρητά σε
αυτό, περνούν σε αυτό το πρότυπο. Ωστόσο, το πρότυπο προορισμού μπορεί
να περιορίσει την εμβέλεια χρησιμοποιώντας το {parameters}
.
{include 'profile.latte', userId: $user->id}
{include block}
Όταν εισάγετε ένα μπλοκ που ορίζεται στο ίδιο πρότυπο, όλες οι μεταβλητές περιβάλλοντος και οι ρητά ορισμένες μεταβλητές περνούν σε αυτό:
{define blockName}
<p>Όνομα: {$name}, Ηλικία: {$age}</p>
{/define}
{var $name = 'Jan', $age = 30}
{include blockName}
Σε αυτό το παράδειγμα, οι μεταβλητές $name
και $age
περνούν
στο μπλοκ blockName
. Το {include parent}
συμπεριφέρεται με τον
ίδιο τρόπο.
Κατά την εισαγωγή ενός μπλοκ από άλλο πρότυπο, περνούν μόνο οι μεταβλητές εισόδου και οι ρητά ορισμένες. Οι μεταβλητές περιβάλλοντος δεν είναι αυτόματα διαθέσιμες.
{include blockInOtherTemplate, name: $name, age: $age}
{layout}
ή {extends}
Αυτές οι ετικέτες ορίζουν ένα layout στο οποίο περνούν οι μεταβλητές εισόδου του παιδικού προτύπου και επιπλέον οι μεταβλητές που δημιουργούνται στον κώδικα πριν από τα μπλοκ:
{layout 'layout.latte'}
{var $seo = 'index, follow'}
Το πρότυπο layout.latte
:
<head>
<meta name="robots" content="{$seo}">
</head>
{embed}
Η ετικέτα {embed}
είναι παρόμοια με την ετικέτα {include}
, αλλά
επιτρέπει την εισαγωγή μπλοκ στο πρότυπο. Σε αντίθεση με το
{include}
, περνούν μόνο οι ρητά δηλωμένες μεταβλητές:
{embed 'menu.latte', items: $menuItems}
{/embed}
Σε αυτό το παράδειγμα, το πρότυπο menu.latte
έχει πρόσβαση μόνο στη
μεταβλητή $items
.
Αντίθετα, στα μπλοκ μέσα στο {embed}
, υπάρχει πρόσβαση σε όλες τις
μεταβλητές περιβάλλοντος:
{var $name = 'Jan'}
{embed 'menu.latte', items: $menuItems}
{block foo}
{$nam}
{/block}
{/embed}
{import}
Η ετικέτα {import}
χρησιμοποιείται για τη φόρτωση μπλοκ από άλλα
πρότυπα. Τόσο οι μεταβλητές εισόδου όσο και οι ρητά δηλωμένες
μεταβλητές μεταφέρονται στα εισαγόμενα μπλοκ.
{import 'buttons.latte'}
{sandbox}
Η ετικέτα {sandbox}
απομονώνει το πρότυπο για ασφαλή επεξεργασία.
Οι μεταβλητές περνούν αποκλειστικά ρητά.
{sandbox 'secure.latte', data: $secureData}