Skip to content

Commit

Permalink
latte: added passing-variables
Browse files Browse the repository at this point in the history
  • Loading branch information
dg committed May 20, 2024
1 parent f155816 commit e2defae
Show file tree
Hide file tree
Showing 34 changed files with 2,754 additions and 0 deletions.
1 change: 1 addition & 0 deletions latte/bg/cookbook/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
Примерни кодове и рецепти за изпълнение на често срещани задачи с Latte.

- [Насоки за разработчици |/develop]
- [Предаване на променливи между шаблони |passing-variables]
- [Всичко, което винаги сте искали да знаете за групирането |grouping]
- [Как се пишат SQL заявки в Latte |how-to-write-sql-queries-in-latte]?
- [Миграция от PHP |migration-from-php]
Expand Down
161 changes: 161 additions & 0 deletions latte/bg/cookbook/passing-variables.texy
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}}
1 change: 1 addition & 0 deletions latte/cs/cookbook/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Návody a postupy
Příklady kódů a receptů pro provádění běžných úkolů pomocí Latte.

- [Postupy pro vývojáře |/develop]
- [Předávání proměnných napříč šablonami |passing-variables]
- [Všechno, co jste kdy chtěli vědět o seskupování |grouping]
- [Jak psát SQL queries v Latte? |how-to-write-sql-queries-in-latte]
- [Migrace z Latte 2 |migration-from-latte2]
Expand Down
161 changes: 161 additions & 0 deletions latte/cs/cookbook/passing-variables.texy
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}}
1 change: 1 addition & 0 deletions latte/de/cookbook/@home.texy
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ Kochbuch
Beispielcodes und Rezepte für die Erledigung gängiger Aufgaben mit Latte.

- [Leitlinien für Entwickler |/develop]
- [Übergabe von Variablen zwischen Vorlagen |passing-variables]
- [Alles, was Sie schon immer über Gruppierung wissen wollten |grouping]
- [Wie schreibt man SQL-Abfragen in Latte? |how-to-write-sql-queries-in-latte]
- [Umstieg von PHP |migration-from-php]
Expand Down
Loading

0 comments on commit e2defae

Please sign in to comment.