Μεταβίβαση μεταβλητών μεταξύ προτύπων
Αυτός ο οδηγός εξηγεί πώς μεταβιβάζονται μεταβλητές μεταξύ προτύπων
στο Latte χρησιμοποιώντας διάφορες ετικέτες όπως {include}
,
{import}
, {embed}
, {layout}
, {sandbox}
και άλλες. Θα μάθετε
επίσης πώς να εργάζεστε με μεταβλητές στις ετικέτες {block}
και
{define}
, καθώς και το σκοπό της ετικέτας {parameters}
.
Τύποι μεταβλητών
Οι μεταβλητές στο Latte μπορούν να χωριστούν σε τρεις κατηγορίες με βάση τον τρόπο και τον τόπο ορισμού τους:
Μεταβλητές εισόδου είναι αυτές που περνούν στο πρότυπο από έξω,
για παράδειγμα, από ένα PHP script ή χρησιμοποιώντας μια ετικέτα όπως το
{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 = 'original'}
{block example}
{var $foo = 'modified'}
{/block}
{$foo} // outputs: original
{define}
Η ετικέτα {define}
χρησιμοποιείται για τη δημιουργία μπλοκ που
εμφανίζονται μόνο όταν καλούνται με τη χρήση του {include}
. Οι
μεταβλητές που είναι διαθέσιμες μέσα σε αυτά τα μπλοκ εξαρτώνται από
το αν έχουν καθοριστεί παράμετροι στον ορισμό. Εάν καθοριστούν
παράμετροι, μόνο αυτές οι παράμετροι είναι προσβάσιμες. Εάν όχι, είναι
προσβάσιμες όλες οι μεταβλητές εισόδου του προτύπου όπου ορίζονται
τα μπλοκ.
{define hello}
{* has access to all input variables of the template *}
{/define}
{define hello $name}
{* has access only to the $name parameter *}
{/define}
{parameters}
Η ετικέτα {parameters}
χρησιμοποιείται για τη ρητή δήλωση των
αναμενόμενων μεταβλητών εισόδου στην αρχή του προτύπου. Με αυτόν τον
τρόπο, μπορείτε εύκολα να τεκμηριώσετε τις αναμενόμενες μεταβλητές
και τους τύπους δεδομένων τους. Είναι επίσης δυνατό να ορίσετε
προεπιλεγμένες τιμές.
{parameters int $age, string $name = 'unknown'}
<p>Age: {$age}, Name: {$name}</p>
{include file}
Η ετικέτα {include file}
χρησιμοποιείται για την εισαγωγή ενός
ολόκληρου προτύπου. Αυτό το πρότυπο περνάει τόσο τις μεταβλητές
εισόδου του προτύπου όπου χρησιμοποιείται η ετικέτα όσο και ρητά
καθορισμένες μεταβλητές. Ωστόσο, το πρότυπο-στόχος μπορεί να
περιορίσει το πεδίο εφαρμογής χρησιμοποιώντας το {parameters}
.
{include 'profile.latte', userId: $user->id}
{include block}
Κατά την εισαγωγή ενός μπλοκ που ορίζεται στο ίδιο πρότυπο, όλες οι περιβάλλουσες και ρητά καθορισμένες μεταβλητές μεταβιβάζονται σε αυτό:
{define blockName}
<p>Name: {$name}, Age: {$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.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}
{$name}
{/block}
{/embed}
{import}
Η ετικέτα {import}
χρησιμοποιείται για τη φόρτωση μπλοκ από άλλα
πρότυπα. Στα εισαγόμενα μπλοκ μεταβιβάζονται τόσο οι μεταβλητές
εισόδου όσο και οι ρητά δηλωμένες μεταβλητές.
{import 'buttons.latte'}
{sandbox}
Η ετικέτα {sandbox}
απομονώνει το πρότυπο για ασφαλή επεξεργασία.
Οι μεταβλητές μεταβιβάζονται αποκλειστικά ρητά.
{sandbox 'secure.latte', data: $secureData}