Smarty Template Engine 15.díl - Řídící struktury VI.

Napsal (») 1. 6. 2009 v kategorii PHP/HTML, přečteno: 943×
obrazky/smarty.gif

Smarty Template Engine 15.díl - Řídící struktury VI.


Pokud jste došli díl po dílu až k tomuto čtrnáctému, máte jako HTML kodér všechny nejnutnější vědomosti pro zvládnutí kódování s pomocí Smarty Template Engine. Možnosti je samozřejmě mnohem více a i Ty si ještě uvedeme v dílech následujících. Přesto bych si dovolil krátké shrnutí a několik příkladů k podmínkám.

Stylování podle typu uživatele


Naprosto typickým příkladem použití podmínek ve Smarty je odlišné kódování webu v případě, že se na Vašem portálu vedete registrované uživatele. Popř při jejich výpisu měníte vzhled řádku podle typu uživatele. To co jste doposud zvládl pouze s výraznáým příspěním programátora, by jste nyní jako kodér měl zvládnout v podstatě sám a bez problémů, pouze s informacemi od programátora. A to názvy proměnných, hodnoty tabulky, názvy Session apod.

Vezme v úvahu výpis uživatelů portálu. V php skriptu proběhne jejich načtení do proměnné „user“, dále pak kontrolujete, zda náhodu není některý uživatel přihlášen, a zda není ve výpisu i jeho jméno.
Identifikaci uživatele provádíte pomocí SESSION proměnné „ss_id“, v které je předáván unikátní klíč uživatele. (V praxi je na SESSION nastaven např. Dočasný hash, který se na každé stránce kontroluje s hodnotami v DB a programátor Vám případně předá další potřebné hodnoty.)

Tzn. víme:
proměnná user (jmeno, id jako výchozí hodnota, ui – jako typ uživatele. 1 – administrátor, 2 – správce, 3 – běžný čtenář portálu )
proměnná SESSION s názvem ss_id s unikátním klíčem uživatele

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

$_SESSION['ss_id'] = 2;

$user[0] = array('id' => '0','name' => 'Tom Jedna', 'ui' => '1');
$user[1] = array('id' => '2','name' => 'Martin Dva', 'ui' => '2');
$user[2] = array('id' => '3','name' => 'Jindra Tri', 'ui' => '3');
$user[3] = array('id' => '4','name' => 'Honza Osm', 'ui' => '3');
$user[4] = array('id' => '5','name' => 'Pavel Sestset', 'ui' => '3');
$user[5] = array('id' => '6','name' => 'Tadeas Dvanact', 'ui' => '2');
$user[6] = array('id' => '1','name' => 'Tadeas Dvanact', 'ui' => '2');
$smarty->assign('user', $user);

$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>
<table>
<tr>
<td></td>
<td>Jmeno</td>
<td>Status</td>
<td></td>
</tr>
{section name=us loop=$user}
<tr style="background-color:#{if $smarty.section.us.index % 2 == 0}eee{else}ddd{/if};{if $user[us].ui == 2 or $user[us].ui == 1}font-weight:bold;{/if}"><td>{$smarty.section.us.iteration}</td>
<td> {$user[us].name}</td>
<td>{if $user[us].ui == '1'}admin{elseif $user[us].ui == '2'}spravce{elseif $user[us].ui == '3'}ctenar{/if}</td>
<td>{if $user[us].id == $smarty.session.ss_id} váš profil {/if}</td>
{/section}

</p>
</div>
</body>
</html>


V příkladu jsme využili velkou většinu příkazů, jež jsou pro chod webu potřebné. Práce s polem, použití operátoru AND, OR. Vnitřní proměnou, speciální proměnné. Přesně takovým způsobem pak i probíhá práce s daty v běžném projektu, což si v budoucnu ještě ukážeme.
¨

Základní chyby


  • V případě chybové hlášky typu:yntax error: unclosed tag - neuzavřený tag. Nejčastější chyba. Všechny řídící proměnné jsou párové, tzn. musíme je ukončit jejich ekvivalentem.

  • syntax error: mismatched tag - tagy musí být ukončeny v logickém pořádku tak jak vznikly. Nemůžeme tedy vytvořit section, za ním if a ukončit první section. Logicky musí if skončit uvnitř příkazu section. Stejně tak to platí u všech párových tagů.

  • u příkazu „foreach“ je nutné dávat si pozor na jméno, které si nastávíme jako value



Facebook Twitter Topčlánky.cz Linkuj.cz

Komentáře

Č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 deset a jedenáct