Smarty Template Engine 12.díl - Řídící struktury III.
Jednou z dalších možností cyklů ve Smarty, jež každý kodér někdy bude potřebovat využít, jsou jejich vnitřní proměnné. Přístup k nim se v rámci "foreach" a „section“ liší pouze v popsání typu cyklu, výsledek je u obou totožný.
Dále nás ještě překvapí cyklus section, možností jeho atributů je totiž více.
Atributy příkazu section
- name – jméno section, unikátní pro šablonu
- loop – jméno procházené proměnné
- start – hodnota, kterou má cyklus brát jako výchozí od začátku pole. V případě záporného čísla počítá section hodnotu od konce pole. V případě zadání hodnoty, jež neleží v rozmezí, si najde section sám hodnotu nejbližší (nepovinná)
- step – krok jednoho cyklu. V případě záporného čísla bude cyklus iterovat pozpátku
- max – maximální počet iterací cyklu (nepovinná)
- show – (true/false) – určuje zobrazení sekce (nepovinná)
Pokud bychom tedy chtěli dosáhnout stejného výsledku, jako při vynechání nepovinných atributů, vypadal by příkaz section takto:
{section name=name loop=$variable step=1 start=0 show=true}
{/section}
Pokud bychom např. rádi vypisovali pouze sudé záznamy a to od konce a pozpátku, použijeme následující syntaxi. (Např. pro 20 záznamů)
{section name=variable loop=$name step=-2 start=19 show=true}
{/section}
Vnitřní proměnné
foreachPřístup u foreach je následující syntaxí:
{$smarty.foreach.nazev_cyklu.vlastnost_cyklu}
section
{$smarty.section.nazev_cyklu.vlastnost_cyklu}
- index – slouží k zjištění aktuálního indexu v poli (číslované od nuly)
- index_prev – slouží k zjištění předešlého indexu (při první iteraci -1)
- index_next – slouží k zjištění následujícího indexu, respektující již při první iteraci nastavení step (u section)
- iteration – nezávisle na nastavení atributů max, step, start vypisuje pořadí aktuální iterace
- first – obsahuje hodnotu true, pokud jde o první iteraci
- last – obsahuje hodnotu true, pokud jde o poslední iteraci
- loop – obsahuje poslední hodnotu vlastnosti index (viz výše). Je možno vypsat i mimo tělo cyklu
- show – obsahuje hodnotu atributu show u section
- total – obsahuje celkový počet iterací a stejně jako loop může být použita i mimo tělo cyklu
Jako krásný příklad nám může posloužit např. vypsání výsledkové listiny, u kterého můžeme využít vlastnosti iteration.
index.php
<?php
require_once("./hlavicka.php");
$ttl = array('Mgr.','Ing.','');
$smarty->assign('ttl',$ttl);
$firstName = array('John','Josh','Jane');
$smarty->assign('firstName',$firstName);
$lastName = array('First', 'Second', 'Third');
$smarty->assign('lastName',$lastName);
$smarty->display('index.tpl');
?>
index.tpl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-language" content="cs" />
<title>
Smarty - index
</title>
</head>
<body>
<div>
<p>
{section name=person loop=$lastName step=-1 start=2 show=true}
<p>
{$smarty.section.person.iteration + 1}. {$ttl[person]|default:'Mr.'} {$firstName[person]} {$lastName[person]}<br/>
</p>
{/section}
</p>
</div>
</body>
</html>
Na výpisu dostaneme jména, včetně umístění :). Příkladů je samozřejmě mnohem více, ale většinou se používají dohromady s podmínkami, o kterých budeme mluvit v příštím díle.