Предаване на променливи между шаблони
Това ръководство обяснява как се предават променливи между шаблони в
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 = '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}