Smarty Template Engine 13.díl - Řídící struktury IV.
Pod pojmem podmínka si můžeme v lidském životě představit ekvivalent věty: Pokud...pak...Ve světě programátorů pak snad každý jazyk prezentuje tuto otázku pomocí příkazu „if“. Vnitřní svět tohoto příkazu se pak řídí podle tzv. výrokové logiky. Tzn. Že funkce rozhoduje, zda jsou její vnitřní parametry nastaveny jako „pravda“ (true), nebo „nepravda“ (false). V případě pravdivosti provede určitou, námi nadefinovanou sadu úkolů. Nabízí pak možnost i pro možnost, že parametr vrací false. Využití této konstrukce najdou kodéři v rámci nejrůznějších projektů bezpočet. Smarty jim navíc pro usnadnění nabízí speciální operátory pro práci s podmínkami v podobě textových operátorů. Tím se snaží stejně jako i v jiných nastaveních vyjít neprogramotárosky založeným web kodérům. Od nich se pak pouze čeká základní pochopení, kdy je podmínky vhodné využít.
Co je třeba mít napaměti:
- pokud se nechceme setkat s nemilou chybou, vždy mějme na paměti, že stejně jako cykly foreach a section musí být tag {if} ukončen. Tzn. Že někde musí následovat ukončovací tag {/if}. Mezi němi je pak kód, který se provede v případě, že podmínka je true.
- Při používání slovních operátorů je třeba dodržovat mezery. Toto varování se týká především varování, kteří si s tímto často nějak výrazně hlavu nelámou.
Operátory If
Zde nabízím seznam operátoru a jejich ekvivalent v PHP. Praktické využití si ukážeme v příštím díle. Připomínám, že podrobný popis naleznete na stránkách Smarty - http://www.smarty.net/manual/en/language.function.if.php
eq rovná se == ne, neq nerovná se != not negace !
gt větší než > lt menší než < ge, gte větší nebo rovno >= le, lte menší nebo rovno <= is even je sudé % 2 == 0 is odd je liché % 2 == 1 is not even není sudé % 2 != 0 %, mod modulus % === porovnává i typ === isnot odd není liché % 2 != 1 is div by je dělitelné číslem % cislo == 0
Význam slovních operátorů je tedy jasný. Zjišťujeme zda se nějaká hodnota rovná/nerovná parametrem za operátorem. Nutnost zadávat slovní operátory tu samozřejmě není. PHP ekvivalenty se tu dají použít stejně dobře. Pro jednoduchou ukázku tedy např.
index.php
<?php
require_once("./hlavicka.php");
$cisla = array(0,1,2,4,7,8,9);
$smarty->assign('cisla' , $cisla);
$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=ukazka loop=$cisla}
{if $cisla[ukazka] is even}
{$cisla[ukazka]} <b>je</b> jasně sudé číslo. <br/>
{else}
{$cisla[ukazka]} <b>není</b> sudé číslo. <br/>
{/if}
{/section}
NEBO TAKÉ<br/>
{section name=ukazka loop=$cisla}
{if $cisla[ukazka] % 2 == 0}
{$cisla[ukazka]} <b>je</b> jasně sudé číslo. <br/>
{else}
{$cisla[ukazka]} <b>není</b> sudé číslo. <br/>
{/if}
{/section}
NEBO TAKÉ<br/>
{section name=ukazka loop=$cisla}
{if $cisla[ukazka] % 2 != 1}
{$cisla[ukazka]} <b>je</b> jasně sudé číslo. <br/>
{else}
{$cisla[ukazka]} <b>není</b> sudé číslo. <br/>
{/if}
{/section}
</p>
</div>
</body>
</html>
V prvním případě jsme použili slovní operátor „is even“, který dle tabulky zjišťuje zda je parametr sudý. Parametrem jsou hodnoty z proměnné číslo. V případě pravdivosti výroku se vypíše, že číslo je sudé. Jde o kód uzavřený v tazích {if}{else}. Hodnota false provádí příkazy mezi tagy {else}{/if}.
V druhém příkladě se ptáme, zda je zbytek po dělení čísla roven nule (matematické dokazování sudosti).
V třetím příkladě je podmínka považována za pravdivou v případě pravdivosti výroku, že zbytek po dělení čísla není roven jedné. Což je opět jinak řečené pravidlo sudosti.
Z příkladu jste navíc jistě pochytili, že obdobně jako u příkazů „section“, a „foreach“ se kód v případě nepravdy uzavírá mezi „else“ a ukončovací tag.