Smarty Template Engine 20.díl - Funkce V.
V následujících dílech si ukážeme uživatelské funkce, implementované do knihovny Smarty.
assign
Tento příkaz již známe z předchozích dílů ve dvou provedeních. Slouží nejen jako metoda třídy Smarty, pro přiřazení hodnot z aplikační, do prezenční logiky, ale můžeme ji využít i přímo v templatech pro nastavení námi definované proměnné.- var – název proměnné (povinný parametr)
- value – hodnota proměnné (povinný parametr)
Použití v šabloně:
index.tpl
{include file='./hlavicka.tpl' hlavicka='Smarty Template Engine'}
<p>
{assign var=pozdrav_1 value='ahoj'}
{assign var=pozdrav_2 value='Dobry den'}
Pozdrav je: <strong>{$pozdrav_1}</strong>, nebo <strong>{$pozdrav_2}</strong>
</p>
{include file='./paticka.tpl'}
Použití pro přiřazení proměnné z aplikační do prezeční logiky
index.php
<?php
require_once("./hlavicka.php");
$_SESSION['ss_id'] = 2;
$user[0] = array('id' => '0','name' => 'Tom Jedna', 'ui' => '1');
$user[1] = array('id' => '2','name' => 'Martin Dva', 'ui' => '2');
$smarty->assign('user', $user);
$smarty->display('index.tpl');
?>
Použití array je právě zde, použité podobným duchem, pouze s jiným způsobem, jako v předchozím příkladě.
index.tpl
{include file='./hlavicka.tpl' hlavicka='Smarty Template Engine'}
<p>
{foreach from=$user item=vystup}
ID:<strong>{$vystup.id}</strong>, jmeno:<strong>{$vystup.name}</strong>
</p>
{/foreach}
{include file='./paticka.tpl'}
I v samotné šabloně ovšem můžeme dále přiřazovat nové proměnné. Důležité je pouze nezapomenout, že název jedné proměnné by se něměl v rámci jedné šablony opakovat.
{include file='./hlavicka.tpl' hlavicka='Smarty Template Engine'}
<p>
{assign var=iterace value=0}
{foreach from=$user item=vystup}
{assign var=iterace value=$iterace+1}
ID:<strong>{$vystup.id}</strong>, jmeno:<strong>{$vystup.name}</strong> (iterace: {$iterace})
</p>
{/foreach}
{include file='./paticka.tpl'}
Nad foreach cyklem tedy vytvoříme proměnnou „iterace“ pomocí příkazu assign. Při každém opakování cyklu pak jakoby vytvoříme novou proměnnou „iterace“, do které načteme starou hodnotu „$iterace“ + 1. Povšimnětě si způsobu zápisu, při takovéto práci s proměnnou.
Do položky var se napíše prostý text názvy proměnné. A protože od proměnné vyžadujeme její vlastní iterování, nebo-li zvyšování své hodnoty o určitou konstantu, porušíme pravidlo jedné unikátně přiřazené proměnné a do ní samotné vložíme proměnnou stejně jako bychom ji vypisovali (tedy jako „$promenna“), a přičteme jedničku. Místo jedničky bychom ale samozřejmě mohli např. Přičítat jinou proměnnou, či slepovat dohromady text apod.
counter
Pokud už je řeč o iterovaní proměnných, i na tuto možnost mysleli vývojáři Smarty. Právě funkce counter, nebo-li počítadlo, plní automaticky funkci iterátoru (v PHP obdoba „for“ cyklu), včetně možnosti zvolení směru, počatečního stavu, či velikosti kroku.- name – unikátní jméno počítadla, kterým ho budeme volat dále v šabloně, dafault: default(nepovinný)
- start – počateční hodnota počítadla, defaultně: 1(nepovinný)
- skip – velikost kroku, kladné celé číslo, defaultně: 1(nepovinný)
- direction – směr počítadla, respektive přičítání/odčítání (reprezentují hodnoty „up“/„down“)d , defaultně: „up“(nepovinný)
- print – zda povolit vypisování první hodnoty počítadla, „true“/„false“, defaultně: „true“(povinný)
- assign – teplate, kterému má být počítadlo přístupné, zadává se jako String, tedy text, defaultně: „“(nepovinný)
Jako příklad si ponecháme obsah index.php z příkladu u assign a pomocí counteru vypíšeme nejprve stejný obsah, jako pomocí assign, změnou v šabloně takto:
index.tpl
{include file='./hlavicka.tpl' hlavicka='Smarty Template Engine'}
<p>
{foreach from=$user item=vystup}
ID:<strong>{$vystup.id}</strong>, jmeno:<strong>{$vystup.name}</strong> (iterace: {counter})
</p>
{/foreach}
{include file='./paticka.tpl'}
Ukázka parametrů příkazů si demonstrujeme zde
index.zpl
{include file='./hlavicka.tpl' hlavicka='Smarty Template Engine'}
<p>
{counter start=10 skip=10 print=false direction=up}
{foreach from=$user item=vystup}
ID:<strong>{$vystup.id}</strong>, jmeno:<strong>{$vystup.name}</strong> (iterace: {counter})
</p>
{/foreach}
{include file='./paticka.tpl'}
Nastavíme počáteční hodnotu na 10, krokování na deset taktéž a zakážeme vypsání první proměnné (pouze pro ukázku). Směr nastavíme na „up“, tedy iteration.
Výsledek by měl vypadat takto:
ID:0, jmeno:Tom Jedna (iterace: 20)
ID:2, jmeno:Martin Dva (iterace: 30)