Smarty Template Engine 17.díl - Funkce II.
V tomto díle budeme pokračovat ve výčtu vnitřně zabudovaných funkcí ve Smarty. Především tedy v těch, jež jsou nejpoužívanější a pro kodéry webových aplikací také nejzajímavější.
foreach
„Foreach“ je nám už známá funkce. Jde o základní a nejjednodušší možnost, jak ve Smarty vypsat proměnné. Od PHP programátora dostanete několik instrukcí, a to hlavně: název proměnné, jak způsobem přistupovat k sloupcům DB tabulky, či jiných dat v proměnné uložených. Na Vás, jako kodérovi pak leží práce nad vypsáním dat dle zadání.
Cyklus „foreach“ má svou stejnojmennou ekvivalenci v PHP. U Smarty se nemusíte bát neošetřeného prázdného vstupu (v PHP šlo o chybu, cyklus musel být buď ošetřen, nebo uveden zavináčem), naopak, v případě, že jsme cyklu nepředaly žádná data, můžeme použít „foreachelse“ pro stanovení následného chování.
{foreach from=$promenna item=vypis key=index name=jmeno}
telo
{foreachelse}
Co udelat v pripade, ze je promenna prazdna
{/foreachelse}
Foreach obsahuje tyto atributy:
- from – název procházeného pole
item – název proměnné, skrz kterou budeme přistupovat k buňkám pole (resp. řádkům DB)- key – index právě procházené hodnoty (nepovinný parametr)
- name – unikátní pojmenování cyklu v rámci jednoho souboru Smarty (nepovinný parametr). Hodí se zadat v případě, že budeme dále přistupovat k hodnotám cyklu uvnitř, i mimo něj.
if,else if, else
O podmínkách, nebo-li fci if jsme velice podrobně mluvili zde:Řidící struktury. Přesto pro přehlednost všech funkcí pohromadě uvedu ještě jednou základní myšlenu a možnosti jejího používání.Vnitřní svět tohoto příkazu se ří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ů.
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 ukázky si prosím nalinkujte viz odkaz výše.
include
Velmi důležitou a často používanou funkcí je bezpochyby funkce „include“, kterou PHP programátoři určitě dobře znají i ze svého skriptovacího jazyka jako příkaz „include“, či „require“. Použití je jednoduché. Slouži k načtení externí šablony do šablony aktuální, což je věc, která se může často hodit už v případě vytváření grafiky. Hodí se však i všude tam, kde načítáme některý prvek stránky více než na jednom místě a chceme si tak jednoduše ušetřit práci. Nejenže nemusíme kód kopírovat, ale při jeho změně se pak projeví odlišnosti ve všech šablonách, kde je includovaný soubor použiván. Nemusíte pak tedy pracně procházet složky a hledat jeho využití. Plní tedy velmi obdobnou práci jako funkce „capture“.- file – slouží k specifikování šablony pro načtení. Šablona musí být uložena v adresáři, jež si tak nastavíme direktivou $template_dir, defaultně jde o adresář templates. (povinný)
- assign – podobně jako u assign v příkazu capture, můžeme pomocí tohoto příkazu nastavit proměnnou, přes kterou budemem přistupovat k datům v šabloně. V případě načitání dat tak můžeme vypisovat předané hodnoty. (nepovinný)
- var – do hlavičky příkazu si můžeme dopsat libovolně proměnných, jež se předávají includované v šabloně a my je v ní můžeme změnit. Pokud bychom měli např. Proměnnou Title, můžeme ho zapsáním do hlavičky include změnit. Takže přesto, že se vždy načte základní verze hlavičky, title můžeme v každé šabloně nastavit zvlášť, podobně, jako zde:
Do složky templates uložime: hlavicka.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>
{$textik}
</title>
</head>
<body>
<div>
paticka.tpl
</div>
</body>
</html>
index.tpl
{include file='./hlavicka.tpl' textik="A ono se nic nemeni!!"}
<p>
Text
</p>
{include file='./paticka.tpl'}