Smarty Template Engine 11.díl - Řídící struktury II.

Napsal (») 12. 5. 2009 v kategorii PHP/HTML, přečteno: 998×
obrazky/smarty.gif

Smarty Template Engine 11.díl - Řídící struktury II.


V mnoha případech dolování dat nám jednoduchý příkaz „foreach“ stačit nebude. Nároky mohou být různé, stejně tak se pak mění i způsob, jakým přistupovat k prvkům pole. Proto existuje ve Smarty příkat „section“, který nabízí kodérům několik zásadních možností, které v praxi jednou určitě oceníte. Šikovný programátor si jednotlivé metody dokáže i ve Smarty doladit sám, proč však nevyužít možností, jež nám Smarty samo nabízí.

Section


Příkaz section se z PHP nejvíce podobá cyklu „for“, jež známe z většiny programovacích jazyků od Basicu, přes Pascal až po Javu. Oproti foreach je však přístupování k řádkům DB, či prvkům pole mírně odlišné a mění se i zápis atributů.
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>
{section name=dny loop=$days}
den: {$days[dny].name} ({$days[dny].shrt}) <br/>
{sectionelse}

Pole je prázdné.

{/section}
</p>
</div>
</body>
</html>


Nejjednodušší zápis vydíte výše. Včetně bloku „sectionelse“, jež slouží k určení instrukcí, v případě, že předáme prázdné pole.

Základní parametry pro vypsání jsou tedy takovéto:


  • name – určení názvu section. Unikátní v rámci šablony

  • loop – proměnná, jež má být procházena



Způsob, jak přistoupit k jednotlivé hodnotě je pak následující:
$loop[name] /* v případě, že obsahuje pouze jeden sloupec*/
$loop[name].sloupec /* v případě, že sloupců je více*/


Výhody section proti Foreach


Co tedy nabízí příkaz section, krom jiného zápisu, navíc? První a zároveň jedno z nejpříjemnějších vylepšení oceníte v případě, kdy např. Vypisujete data ze dvou sql dotazů, přiřazených pomocí dvou různých proměnných.
V takovém případě se nemusíte odkazovat pomocí podmínek a ID řádku, ale příkaz section umožní vypsání dalších polí (dle stejného indexu pole) až do hodnoty, jež je nastavena počtem řádku v proměnné, přiřazené prostřednictvím atributu „loop“.
Jasnější by to mohlo být na příkladě.

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');
?>


Vytvoříme si tedy tři proměnné, všechny se stejným počtem řádků.

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}
<p>
{$ttl[person]|default:'Mr.'} {$firstName[person]} {$lastName[person]}<br/>
</p>
{/section}
</p>
</div>
</body>
</html>


V šabloně pak nastavíme jako výchozí proměnnou, jež budeme procházet. V našem případě jsem si vybral příjmení == "lastName". Nemusíme však připisovat další příkazy section (jak by tomu bylo u foreach) a příkaz automaticky vypíše prvky se stejným ID z ostatních proměnných.

Vnořování


Na nesouvislá data se dá také odkazovat pomocí indexu ať už přímo v atributech cyklu, nebo pomocí podmínek. Tuto možnost si rozebereme v příštích dílech.

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 osm a deset