Smarty Template Engine 5.díl - Proměnné II.

Napsal (») 15. 4. 2009 v kategorii PHP/HTML, přečteno: 1732×
obrazky/smarty.gif

Smarty Template Engine 4.díl - Proměnné I.


Už víme jakým způsobem se předavájí jednotlivé reprezentace dat. Dnes si ukážeme, jak je efektivně vypisovat v prezenční logice, aniž máme znalosti o stavbě relačních databází, načítání dat, či cyklech.



Základ pro kodéry


Pro Vás, či pro někoho, kdo by měl dělat kodéra, dále nebudou důležité ukázky skriptů v .php (data nebudeme prozatím načítat z DB, ale data si vytvoříme přímo v php skriptu), ale opět je důležité zaměřit se na Smarty v souborech .tpl. Problematiku cyklu tu pro tuto část vyvojářů nastíním pouze v základních rysech.

Cykly

Cykly jsou prostředkem programátorů, bez kterých se obejít nelze. Při hromadném vypisování dat z DB je jejich použití nevyhnutelné. Jejich funkce však vyplívá přímo z jejich názvu. Mají za úkol opakovat programátorem definovanou akci pro určitý konečný počet opakování, určený nějakou podmínkou.
Pokud potřebujeme například vypsat 100x slovo "ahoj", efektivnější než jejich ruční vypsání je napsat toto slovo jednou a uzavřít ho do cyklu, který operaci stokrát opakuje.
V našem případě pak bude počet opakování omezen počtem údajů, jež budeme vypisovat.

Foreach

Tím nejjednodnuším cyklem je příkaz foreach. Od PHP programátora dostanete v případě jeho využití jednoduché instrukce
- jakou proměnnou budete používat a která jména atributů slouží pro jejich vypsání
Sám, jako HTML kodér by jste pak měli vědet, které položky se budou na stránce vypisovat, v jakém pořadí atd.

jeho syntaxe je následující:
{foreach from=$promenna item=vypis key=index name=jmeno}

telo

{foreachelse}

Co udelat v pripade, ze je promenna prazdna

{/foreachelse} /*ukonceni*/



Příklad
Na stránce bude třeba vypsat již dříve použité dny v týdnu a k nim jejich anglické zkratky. Informace pro Vás jsou pak takovéto:
proměnná:days
název dnu v češtině:name
anglická zkratka:shrt

To co pak víte Vy, jako kodér je:
Data mají být vypsána jako číslovaný seznam, první český název a anglická zkratka za ním v závorce a kurzívou.

index.php
<?php
require_once("./hlavicka.php");

/*----vytvoreni asociativniho pole----*/
$days[0] = array('name' => 'pondeli', 'shrt' => 'mon');
$days[1] = array('name' => 'utery', 'shrt' => 'tue');
$days[2] = array('name' => 'streda', 'shrt' => 'wen');
$days[3] = array('name' => 'ctvrtek', 'shrt' => 'thurs');
$days[4] = array('name' => 'patek', 'shrt' => 'fri');
$days[5] = array('name' => 'sobota', 'shrt' => 'sat');
$days[6] = array('name' => 'nedele', 'shrt' => 'sun');

$smarty->assign('days', $days);
$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>
<ol>
{foreach from=$days item=dny key=index name=dnyTydne}
<li>{$dny.name} (<span style="font-style:italic;">{$dny.shrt}</span>)</li>
{/foreach}
</ol>
</p>
</div>
</body>
</html>


Výstup
1. pondeli (mon)
2. utery (tue)
3. streda (wen)
4. ctvrtek (thurs)
5. patek (fri)
6. sobota (sat)
7. nedele (sun)


Popis vlastností foreach
- from - název proměnné, z níž mají být čerpány data. Je potřeba zadat ho se znakem dolaru "$"
- item - název proměnné v samotném cyklu, skrz který budeme přistupovat k hodnotám proměnné
- key - index aktuální hodnoty (nepovinný parametr)
- name - unikátní pojmenování cyklu v rámci jednoho .tpl souboru (nepovinný parametr)

Co jsme tedy provedli. V php souboru jsme uložili do asociativního pole jménem: "days" 7 dní v týdnu a to tak, že
- "name" nese informaci o českém názvu dnu
- "shrt" nese informaci o anglické zkratce

v .tpl souboru jseme se pak na tyto atributy proměnné odkázali



Stejně tak je možno pracovat s jakkoliv inicializovanými daty. Ať už bude potřeba jakákoliv. (vypsání chybových hlášení, jazykových mutací statických prvků stránky aj.).
Proto Vás teď již snad nepřekvapí, že stejně tak bude následující...

index.php
<?php
require_once("./hlavicka.php");

/*kontrola emailu*/
$Varovani['Email'] = 'Nezadal jste správný formát emailu.';

/*kontrola jmena*/
$Varovani['Jméno'] = 'Položka jméno obsahovala nepřípustné znaky';

$smarty->assign('Varovani', $Varovani);
$smarty->display('index.tpl');

?>

index.html
<!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>
{foreach from=$Varovani item=Varovani key=Kde}
<span style="color:#A00;">{$Kde} - {$Varovani}</span><br/>
{foreachelse}
<span style="color:#0A0;">Vše je OK!</span>
{/foreach}
</p>
</div>
</body>
</html>


Protože jsme v php nedefinovali žádný atribut proměnné, k výpisu postačí pouze název položky item pro hodnotu a key pro index.
U toho příkladu si ještě ukážeme použítí vyjímky, která se vypíše v případě, že nabízená proměnná obsahuje prázdné pole.

Zkuste si zadat jako index.php následující
<?php
require_once("./hlavicka.php");

/*kontrola emailu*/
//$Varovani['Email'] = 'Nezadal jste správný formát emailu.';

/*kontrola jmena*/
//$Varovani['Jméno'] = 'Položka jméno obsahovala nepřípustné znaky';

$smarty->assign('Varovani', $Varovani);
$smarty->display('index.tpl');
?>


Protože plněn proměnných je uzavřeno do poznámek a poznámka je prázdná, vypíše se text, který leží mezi {foreachelse} a ukončením tagu {/foreach}.


To je pro začátek cyklů vše
Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Zobrazit: standardní | od aktivních | poslední příspěvky | všechno
Článek ještě nebyl okomentován.


Nový komentář

Téma:
Jméno:
Notif. e-mail *:
Komentář:
  [b] [obr]
Odpovězte prosím číslicemi: Součet čísel tři a osm