Základy použítí SMARTY šablon

Šablonovací systémy mají své příznivce i odpůrce, v některých případech jsou postradatelné, někdy zase vyloženě nenahraditelné. Nutné jsou především tehdy, kdy na jednom projektu dělá více lidí. Šablony v takovém případě nejen pomohou oddělit aplikační a prezentační logiku, ale dají možnost upravovat každou vrstvu zvlášť HTML kodérovi a programátorovi.

Šablony je ovšem výhodné používat také v případě, kdy aplikaci vyvíjí jeden člověk. Představte si situaci, kdy tvoříte nějaký větší projekt, který budete někdy chtít použít znovu. Pokud máte důsledně oddělenou aplikační vrstvu (například jazyk PHP) od prezentační vrstvy (HTML), nebudou úpravy tolik složité. V ideálním případě stačí přepsat pouze HTML kód (v šabloně) a práce je hotová. Začínající programátor si možná řekne, že ten kód přeci může upravit stejně i když šablony nepoužívá. To je sice pravda, ale pokud jsou obě vrstvy promíchané, je třeba projít všechny soubory postupně a upravovat HTML kód mezi řádky PHP, což je o mnoho pracnější, náročnější a delší.

Šablon pro PHP je celá řada. Já se zaměřím na šablonovací jazyk Smarty. Dobře zpracovaný turtoriál v češtině naleznete na adrese smarty.ronnieweb.net. Bohužel autor již dlouho obsah neaktualizuje, přesto doporučuji stránky navštívit. Tento článek nepodává kompletní vysvětlení prací se šablonami, zaměřuje se spíše na výčet praktických postupů.

Instalace Smarty

Instalace je poměrně jednoduchá, stačí si stáhnout balíček z www.smarty.net/download.php a rozbalit ho.

Doporučuji si v projektu vytvořit adresář smarty, do kterého se zkopíruje obsah složky libs z balíčku, a dále složku templates, do které se budou ukládat šablony. V hlavním souboru projektu poté vložíme třídu Smarty.class.php pomocí příkazu require_once 'smarty/Smarty.class.php';. Nyní již můžeme třídu použít a nakonfigurovat jí. To uděláme následujícím kódem:

$smarty = new Smarty;
$smarty->compile_check = true;
$smarty->debugging = false;
$smarty->template_dir = 'smarty/templates';
$smarty->compile_dir = 'smarty/templates_c';
$smarty->config_dir = 'smarty/configs';
$smarty->plugins_dir = array('smarty/plugins');

Pokud některé nastavení nepotřebujete, lze ho vynechat, v opačném případě je třeba se ujistit, že daná složka opravdu existuje (pokud nevíte, zda je pro vás některé nastavení potřebné, nechte ho beze změny a vytvořte příslušné adresáře. V budoucnu již nebudete muset nastavení měnit). Všechny proměnné nemusíme definovat takto, lze je konfigurovat přímo v souboru Smarty.class.php.

Tím je instalace hotová a Smarty by se měly dát použít.

Přiřazení prvků v šabloně

Šabloně předáme data pomocí metody assign, jejíž použití je následující:

$smarty->assign('jmeno',$jmeno);

Často potřebujeme vybrat data z databáze a následně je předat šabloně. Na začátku je tedy SQL dotaz:

$result = mysql_query("SELECT nazev, titulek, text, cena FROM tabulka WHERE id='$id'"); 

Jak nyní předat data šabloně?

Nejjednodušší řešení je předat rovnou pole:

$smarty->assign('data',mysql_fetch_assoc($result));

Schválně jsem do vybíraných sloupců zahrnul cenu. Tu může být potřeba naformátovat, například vynásobit o DPH. Pro tento případ musíme náš kód malinko upravit:

$row = mysql_fetch_assoc($result);
$row['cena'] = $row['cena'] * 1,19;
$smarty->assign('data',$row);

Proč tento postup uvádím? Často jsou v kódu vidět následující konstrukce:

$row = mysql_fetch_assoc($result);
$nazev = $row['nazev'];
$smarty->assign('nazev',$nazev);
$titulek = $row['titulek'];
$smarty->assign('titulek',$titulek);

Jak je vidět na první pohled, tento způsob je pracnější, delší a logicky i pomalejší. Programátor musí kopírovat podobný kód a v případě, že do dotazu přidá další sloupec, musí ho opět přiřadit ručně. V prvních dvou případech stačí přidat sloupec do dotazu a následně je k dispozici i v šabloně.

Výpis prvků v šabloně

Vypsat data v šabloně již není nic těžkého, ve Smarty se pro proměnnou používá, stejně jako v PHP, znak $. Zdrojový kód Smarty šablon se uzavírá do znaků {} (pokud nenastavíte jinak).

Zobrazení konkrétní proměnné jmeno tedy bude v šabloně vypadat takto:

{$jmeno}

V předchozím příkladě jsme naplnili proměnnou $data polem z databáze (v řeči PHP např. $data['titulek'], $data['cena']). I tyto proměnné jsou snadno dostupné, stačí použít syntaxi pro pole:

{$data.titulek}
{$data.cena}


Toto byl rychlý úvod do šablonovacího jazyka Smarty, v některém z příštích článků popíšu další užitečné postupy, například tvorbu univerzálního menu v PHP a jeho výpis v šabloně.

vydáno 23.07.08 - Programování - 3427x - trvalý odkaz trvalý odkaz
Karma: 11. Líbil se vám článek? [ano/ne]
RSS komentářů článku - vytisknout - Odeslat emailem

Komentáře:

  • komentováno 11.08.08, 01:30:42
    Ondra

    Sorry, ale uváděné postupy jsou typické PHP bastly, které bys měl uvádět maximálně jako odstrašující příklady.

    Fuj fuj fuj, jdu pryč... a tenhle článek přidám do seznamu příkladů, že PHP nutí lidi programovat jako prasata.

    Odpověz na komentář
    1. Na komentář reagoval Maxell — #2
  • komentováno 11.08.08, 22:30:21
    Maxell

    Odpověď na Ondra — #1 Můžeš tedy uvést lepší postup? Rád bych věděl, jaký existuje nebastlící způsob na předání dat šabloně. Nechám se poučit.

    Odpověz na komentář
  • komentováno 12.08.08, 00:33:43
    Ondra

    Njn sorry za ten ofenzivní styl, vzal jsem si osobně tu zmínku o špatném překladu.

    Nebastlící styl spočívá v tom, že od sebe odděluješ vrstvy aplikace. Šablony jsou ta úplně nejvyšší, databáze ta úplně nejnižší. Obvykle je mezi tím ještě 1 až 3 vrstvy, u složitějších aplikací ještě víc.

    Obvykle se tedy vkládá ještě bussiness vrstva, která provádí operace nad daty podle vybrané akce klienta, a vrstva datového modelu, která v podstatě modeluje data prostředky daného jazyka a plní je z databáze.

    Asi se ti to teď zdá zbytečné a složité, ale věř - až budeš webové aplikace dělat nějaký ten pátek, pak od přímého spojování mysql_*() funkcí a šablon upustíš.

    Odpověz na komentář
    1. Na komentář reagoval Maxell — #4
  • komentováno 12.08.08, 18:56:11
    Maxell

    Odpověď na Ondra — #3 Tento model mi také není cizí. Hlavní myšlenkou zde ale mělo být ukázat způsoby předání dat šabloně. Myslím, že je celkem jedno, odkud se data získají, pro tento účel není důvod příklady zbytečně komplikovat.
    Článek je zaměřen na méně zkušené lidi. Nepředpokládám, že člověk, který používá tebou popsanou architekturu, by neuměl předat data šabloně. Ovšem viděl jsem již hodně podobných způsobů psaní kódu, proto jsem o tom napsal. Těmto lidem toto podání bude jistě stačit.

    Odpověz na komentář

Nový komentář:

Komentář čeká na schválení.

Tento článek byl uzavřen. Už není možné k němu přidávat komentáře ani hlasovat


Nejoblíbenější články

Poslední komentáře

  • Maxell: [3] Značku base určitě není dobré používat, například některé vyhledávače s tím mohou mít problém. Pokud vím, důležité vyhledávače to podporují, ale rozhodně bych se na ni nespoléhal....
  • I.C.: Není mnohem jednodušší využívat standartního <base href="http: domena.cz " > a pak všude používat jen relativní cesty vzhledem k výše uvedenému? ;-)...
  • gmo: Cau, ja tenhle problem resil pomoci direktivy VirtualHost v nastaveni Apache, viz google...
  • Maxell: [1] Ano, zkoušel jsem to na více místech a chová se to všude stejně. Vyřešil jsem to tak, že jsem zobrazil pouze Nejbližší shodu, která by měla fungovat....
  • Maxell: [3] České vyhledávače description opravdu zatím nevyužívají. U Seznamu o tom již delší dobu uvažují, nicméně k realizaci je stále ještě daleko. Jak je psáno v článku, description by vždy mělo shrnovat obsah dané stránky. Každá kategorie a podkategorie by tak ideálně měla mít vlastní popisek, stejně tak např. každý výrobek. Vámi navrhované texty jsou také poměrně krátké, rozhodně bych je prodloužil na cca 100 - 150 znaků....

Poslední články

Nejlépe hodnocené

Nejčtenější

Copyright © Maxell | Maxell-cz | Design
Web-Design Blog - Blog nejen o webdesignu