-
-
Notifications
You must be signed in to change notification settings - Fork 283
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
34 changed files
with
2,754 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
Предаване на променливи между шаблони | ||
************************************* | ||
|
||
Това ръководство обяснява как се предават променливи между шаблони в Latte с помощта на различни тагове, като например `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` и други. Ще научите също как да работите с променливи в таговете `{block}` и `{define}`, както и за какво служи тагът `{parameters}`. | ||
|
||
|
||
Видове променливи .[#toc-types-of-variables] | ||
-------------------------------------------- | ||
Променливите в Latte могат да бъдат разделени на три категории в зависимост от това как и къде са дефинирани: | ||
|
||
**Входни променливи** са тези, които се предават на шаблона отвън, например от PHP скрипт или с помощта на таг като `{include}`. | ||
|
||
```php | ||
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]); | ||
``` | ||
|
||
**Окръжаващи променливи** са променливи, съществуващи в местоположението на определен таг. Те включват всички входни променливи и други променливи, създадени с помощта на тагове като `{var}`, `{default}`, или в рамките на цикъл `{foreach}`. | ||
|
||
```latte | ||
{foreach $users as $user} | ||
{include 'userBox.latte', user: $user} | ||
{/foreach} | ||
``` | ||
|
||
**Експлицитни променливи** са тези, които са директно посочени в рамките на даден таг и са изпратени към целевия шаблон. | ||
|
||
```latte | ||
{include 'userBox.latte', name: $user->name, age: $user->age} | ||
``` | ||
|
||
|
||
`{block}` | ||
--------- | ||
Тагът `{block}` се използва за дефиниране на блокове код за многократна употреба, които могат да бъдат персонализирани или разширени в наследени шаблони. Обкръжаващите променливи, дефинирани преди блока, са достъпни вътре в блока, но всички промени в променливите се отразяват само в рамките на този блок. | ||
|
||
```latte | ||
{var $foo = 'original'} | ||
{block example} | ||
{var $foo = 'modified'} | ||
{/block} | ||
|
||
{$foo} // outputs: original | ||
``` | ||
|
||
|
||
`{define}` | ||
---------- | ||
Тагът `{define}` се използва за създаване на блокове, които се визуализират само при извикване с помощта на `{include}`. Променливите, които са на разположение вътре в тези блокове, зависят от това дали в дефиницията са посочени параметри. Ако са посочени параметри, достъпни са само тези параметри. Ако това не е така, всички входни променливи на шаблона, в който са дефинирани блоковете, са достъпни. | ||
|
||
```latte | ||
{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}` се използва за изрично деклариране на очакваните входни променливи в началото на шаблона. По този начин можете лесно да документирате очакваните променливи и техните типове данни. Възможно е също така да се дефинират стойности по подразбиране. | ||
|
||
```latte | ||
{parameters int $age, string $name = 'unknown'} | ||
<p>Age: {$age}, Name: {$name}</p> | ||
``` | ||
|
||
|
||
`{include file}` | ||
---------------- | ||
Тагът `{include file}` се използва за вмъкване на цял шаблон. На този шаблон се предават както входните променливи на шаблона, в който се използва тагът, така и изрично дефинирани променливи. Въпреки това целевият шаблон може да ограничи обхвата с помощта на `{parameters}`. | ||
|
||
```latte | ||
{include 'profile.latte', userId: $user->id} | ||
``` | ||
|
||
|
||
`{include block}` | ||
----------------- | ||
При вмъкване на блок, дефиниран в същия шаблон, всички заобикалящи го и изрично дефинирани променливи се предават към него: | ||
|
||
```latte | ||
{define blockName} | ||
<p>Name: {$name}, Age: {$age}</p> | ||
{/define} | ||
|
||
{var $name = 'Jan', $age = 30} | ||
{include blockName} | ||
``` | ||
|
||
В този пример променливите `$name` и `$age` се предават на блока `blockName`. Същото поведение се прилага и за `{include parent}`. | ||
|
||
При вмъкване на блок от друг шаблон се предават само входни променливи и изрично дефинирани променливи. Обкръжаващите променливи не са достъпни автоматично. | ||
|
||
```latte | ||
{include blockInOtherTemplate, name: $name, age: $age} | ||
``` | ||
|
||
|
||
`{layout}` или `{extends}` | ||
-------------------------- | ||
Тези тагове определят оформление, към което се предават входните променливи на подчинения шаблон и променливите, създадени в кода преди блоковете: | ||
|
||
```latte | ||
{layout 'layout.latte'} | ||
{var $seo = 'index, follow'} | ||
``` | ||
|
||
Шаблон `layout.latte`: | ||
|
||
```latte | ||
<head> | ||
<meta name="robots" content="{$seo}"> | ||
</head> | ||
``` | ||
|
||
|
||
`{embed}` | ||
--------- | ||
Тагът `{embed}` е подобен на тага `{include}`, но позволява вграждане на блокове в шаблона. За разлика от `{include}`, се предават само изрично декларирани променливи: | ||
|
||
```latte | ||
{embed 'menu.latte', items: $menuItems} | ||
{/embed} | ||
``` | ||
|
||
В този пример шаблонът `menu.latte` има достъп само до променливата `$items`. | ||
|
||
Обратно, блоковете вътре в `{embed}` имат достъп до всички околни променливи: | ||
|
||
```latte | ||
{var $name = 'Jan'} | ||
{embed 'menu.latte', items: $menuItems} | ||
{block foo} | ||
{$name} | ||
{/block} | ||
{/embed} | ||
``` | ||
|
||
|
||
`{import}` | ||
---------- | ||
Тагът `{import}` се използва за зареждане на блокове от други шаблони. Към импортираните блокове се предават както входни, така и изрично декларирани променливи. | ||
|
||
```latte | ||
{import 'buttons.latte'} | ||
``` | ||
|
||
|
||
`{sandbox}` | ||
----------- | ||
Тагът `{sandbox}` изолира шаблона за безопасна обработка. Променливите се предават изключително изрично. | ||
|
||
```latte | ||
{sandbox 'secure.latte', data: $secureData} | ||
``` | ||
|
||
|
||
{{leftbar: /@left-menu}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
Předávání proměnných napříč šablonami | ||
************************************* | ||
|
||
Tento průvodce vám vysvětlí, jak se proměnné předávají mezi šablonami v Latte pomocí různých tagů jako `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` a dalších. Dozvíte se také, jak pracovat s proměnnými v tagu `{block}` a `{define}`, a k čemu slouží značka `{parameters}`. | ||
|
||
|
||
Typy proměnných | ||
--------------- | ||
Proměnné v Latte můžeme rozdělit do tří kategorií podle toho, jak a kde jsou definovány: | ||
|
||
**Vstupní proměnné** jsou ty, které jsou do šablony předávány zvenčí, například z PHP skriptu nebo pomocí tagu jako `{include}`. | ||
|
||
```php | ||
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]); | ||
``` | ||
|
||
**Okolní proměnné** jsou proměnné existující v místě určité značky. Zahrnují všechny vstupní proměnné a další proměnné vytvořené pomocí tagů jako `{var}`, `{default}` nebo v rámci smyčky `{foreach}`. | ||
|
||
```latte | ||
{foreach $users as $user} | ||
{include 'userBox.latte', user: $user} | ||
{/foreach} | ||
``` | ||
|
||
**Explicitní proměnné** jsou ty, které jsou přímo specifikovány uvnitř tagu a jsou odeslány do cílové šablony. | ||
|
||
```latte | ||
{include 'userBox.latte', name: $user->name, age: $user->age} | ||
``` | ||
|
||
|
||
`{block}` | ||
--------- | ||
Tag `{block}` se používá k definování opakovaně použitelných bloků kódu, které lze v dědičných šablonách přizpůsobit nebo rozšířit. Okolní proměnné definované před blokem jsou dostupné uvnitř bloku, ale jakékoli změny proměnných se projeví jen v rámci toho bloku. | ||
|
||
```latte | ||
{var $foo = 'původní'} | ||
{block example} | ||
{var $foo = 'změněný'} | ||
{/block} | ||
|
||
{$foo} // vypíše: původní | ||
``` | ||
|
||
|
||
`{define}` | ||
---------- | ||
Tag `{define}` slouží k vytváření bloků, které se renderují až po jejich zavolání pomocí `{include}`. Proměnné dostupné uvnitř těchto bloků závisí na tom, zda jsou v definici uvedeny parametry. Pokud ano, přístup mají jen k těmto parametrům. Pokud ne, přístup mají ke všem vstupním proměnným šablony, ve které jsou bloky definovány. | ||
|
||
```latte | ||
{define hello} | ||
{* má přístup ke všem vstupním proměnným šablony *} | ||
{/define} | ||
|
||
{define hello $name} | ||
{* má přístup jen k parametru $name *} | ||
{/define} | ||
``` | ||
|
||
|
||
`{parameters}` | ||
-------------- | ||
Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony. Tímto způsobem lze snadno dokumentovat očekávané proměnné a jejich datové typy. Také je možné definovat výchozí hodnoty. | ||
|
||
```latte | ||
{parameters int $age, string $name = 'neznámé'} | ||
<p>Věk: {$age}, Jméno: {$name}</p> | ||
``` | ||
|
||
|
||
`{include file}` | ||
---------------- | ||
Tag `{include file}` slouží k vložení celé šablony. Této šabloně se předávají jak vstupní proměnné šablony, ve které je značka použita, tak proměnné v ní explicitně definované. Cílová šablona ale může rozsah omezit pomocí `{parameters}`. | ||
|
||
```latte | ||
{include 'profile.latte', userId: $user->id} | ||
``` | ||
|
||
|
||
`{include block}` | ||
----------------- | ||
Když vkládáte blok definovaný ve stejné šabloně, předávají se do něj všechny okolní a explicitně definované proměnné: | ||
|
||
```latte | ||
{define blockName} | ||
<p>Jméno: {$name}, Věk: {$age}</p> | ||
{/define} | ||
|
||
{var $name = 'Jan', $age = 30} | ||
{include blockName} | ||
``` | ||
|
||
V tomto příkladu se proměnné `$name` a `$age` předají do bloku `blockName`. Stejným způsobem se chová i `{include parent}`. | ||
|
||
Při vkládání bloku z jiné šablony jsou předávány pouze vstupní proměnné a explicitně definované. Okolní proměnné nejsou automaticky dostupné. | ||
|
||
```latte | ||
{include blockInOtherTemplate, name: $name, age: $age} | ||
``` | ||
|
||
|
||
`{layout}` nebo `{extends}` | ||
--------------------------- | ||
Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a dále proměnné vytvořené v kódu před bloky: | ||
|
||
```latte | ||
{layout 'layout.latte'} | ||
{var $seo = 'index, follow'} | ||
``` | ||
|
||
Šablona `layout.latte`: | ||
|
||
```latte | ||
<head> | ||
<meta name="robots" content="{$seo}"> | ||
</head> | ||
``` | ||
|
||
|
||
`{embed}` | ||
--------- | ||
Tag `{embed}` je podobný tagu `{include}`, ale umožňuje vkládání bloků do šablony. Na rozdíl od `{include}` se předávají pouze explicitně deklarované proměnné: | ||
|
||
```latte | ||
{embed 'menu.latte', items: $menuItems} | ||
{/embed} | ||
``` | ||
|
||
V tomto příkladu má šablona `menu.latte` přístup pouze k proměnné `$items`. | ||
|
||
Naopak v blocích uvnitř `{embed}` je přístup ke všem okolním proměnným: | ||
|
||
```latte | ||
{var $name = 'Jan'} | ||
{embed 'menu.latte', items: $menuItems} | ||
{block foo} | ||
{$nam} | ||
{/block} | ||
{/embed} | ||
``` | ||
|
||
|
||
`{import}` | ||
---------- | ||
Tag `{import}` se využívá pro načítání bloků z jiných šablon. Přenáší se jak vstupní, tak explicitně deklarované proměnné do importovaných bloků. | ||
|
||
```latte | ||
{import 'buttons.latte'} | ||
``` | ||
|
||
|
||
`{sandbox}` | ||
----------- | ||
Tag `{sandbox}` izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně. | ||
|
||
```latte | ||
{sandbox 'secure.latte', data: $secureData} | ||
``` | ||
|
||
|
||
{{leftbar: /@left-menu}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.