2024. május 1., szerda

Gyorskeresés

Útvonal

Cikkek » Számtech rovat

Smarty bevezető

  • (f)
  • (p)
Írta: |

Aki készített már komolyabb webportált PHP segítségével, az tudja, mennyire könnyen bele...

[ ÚJ TESZT ]

Aki készített már komolyabb webportált PHP segítségével, az tudja, mennyire könnyen bele lehet zavarodni abba, hogy HTML és a PHP kódok egy adott fájlon belül, keverve találhatóak.

Monte Ohrt és Andrei Zmievski ennek a problémának megoldására dolgozta ki a Smarty sablon-kezelőt (template-engine).

Telepítés

Maga az alkalmazás PHP nyelven íródott, használatához csak annyit kell tennünk, hogy letöltjük, a megfelelő helyre kicsomagoljuk, és elérhetővé tesszük a kódunkban egy include-al.

Ezután lehetőségünk van a Smarty osztály használatára. Mielőtt azonban lelkesen a sablon-készítésbe vetnénk magunkat, konfiguráljunk. Ez mindössze annyi, hogy megadjuk a Smarty-nak sablonok forrás könyvtárát (innen fogja a sablonokat venni a feldolgozáshoz) és a már összeállított fájlok könyvtárát (erre azért van szükség, mert a Smarty nem minden esetben generálja le a kimenetet újra, illetve, hogya legyen hova dolgoznia).
Ezt legegyszerűbben a következő pár sorral lehet elérni:

<?php
require_once( './smarty/Smarty.class.php' );
$smarty = new Smarty;
$smarty -> template_dir = './templates'; //itt vannak a sablonok
$smarty -> compile_dir = './templates_c'; //ide dolgozik
?>

Én jobban szeretem, ha eleve úgy származtatok osztályt a Smarty-ból, hogy megfelelően legyenek benne beállítva a könyvtárak.

<?php
class Smarty_Enyim extends Smarty {

function Smarty_Enyim() {
$this->Smarty();
$this->template_dir = './templates/';
$this->compile_dir = './templates_c/';
}

}
$smarty = new Smarty_Enyim;
?>

Erről ennyit, ha valaki többet szeretne tudni a Smarty konfigurálásáról, olvasson utánna. Egyszer én is megtettem, de mivel sohasem kellett használnom a három év alatt, kiment a fejemből...

Sablonkészítés és megjelenítés

A sablonunk (template) tulajdonképen egy HTML fájl, azon "extrákkal", amik megkönnyítük életünket. A neve bármi lehet, amit az adott operációs rendszer elbír, de kiterjesztésük konvencionálisan .tpl. Nézzük a csúcsra járatott példát:

<html>
<body>
Helló, világ. (Hogy én mennyire unom ezt a szöveget...)
</body>
</html>

Mentsük el hello.tpl néven a sablonok forrás könyvtárba. A PHP kódunkat pedig gazdagítsuk a következő sorral:

$smarty -> display( 'hello.tpl' ); //ez a Smarty egyik megjelenítő függvénye

Ha minden jól megy, akkor hello.tpl-be írt szöveget fogjuk látni a böngészőben.
Nagy cucc - lehet mondani - ezt egy sima HTML oldal is tudja, még PHP sem kell hozzá.
Oké, írjuk felül a hello.tpl-t, így:

<html>
<body>
{$szoveg}
</body>
</html>

A PHP kódba pedig már két sort:

$smarty -> assign( 'szoveg', 'Még mindig nem győztelek meg?' );
$smarty -> display( 'hello.tpl' );

Ahogy (remélem) várható volt, most a PHP kódban beírt szöveg jelent meg a böngészőben.
De mi is történt háttérben? Csak annyi, hogy a Smarty észrevette, hogy neki szóló utasítás van a sablonban. Ezt határolta a {...}, de akinek nem tetszik ez a jelölés, az a határolókat átállíthatja a $letf_delimiter és $right_delimiter objektum-változók segítségével.
Ezután kielemezte a neki szánt utasítást, jelen esetben ez egyszerű érték megjelenítés volt. Tehát a sablonban a megfelelő helyre beillesztette azt az értéket, amit az ő szoveg változójához rendeltünk a PHP kódban.

Tömbök kezelése

A Smarty egyik előnye, hogy nagyon jól támogatja a tömbök megjelenítését. Aki csinált már olyan weblapot, ami adatbázisból kinyert adatokat jelenít meg, az tudja mekkora segítség lehet ez.
Szerkesszünk egy ilyesmi sablont:

{$tombom.elsoeleme}&nbsp;{$tombom.masodikeleme}

Akkor a PHP a következő lesz:

$smarty -> assign( 'tombom', array( 'elsoeleme' => 'elsőelem', 'masodikeleme' => 'másoddikelem' ) );
$smarty -> display( 'hello.tpl' );

Gondolom, az eredmény sejthető volt. De ez a megoldás elég fapados. Írjuk át a sablonunkat:

{foreach from=$tombom item=elemem}{$elemem}&nbsp;{/foreach}

Itt a Smarty egyik beépített függvényét használjuk, ami feltűnően hasonlít a PHP foreach-ére.
Bonyolítsuk a dolgot! Képzeljünk el, bizonyos elemeket félkövéren kell megjelenítenünk a tömbből. Mondjuk azokat, amelyek páros szám hosszúak. Ekkor a sablon:

{foreach from=$tombom item=elemem}
{if $elem|count_characters is even}
<b>{$elemem}</b>&nbsp;
{else}
{$elemem}
{/if}
{/foreach}

Új elemként megjelenik a (már gondolom hiányolt) feltételes szerkezet és a kevésbé könnyen emészthető $elem|count_characters. Nos, az if és a foreach beépített Smarty függvény, a count_characters egy egyszerű függvény, amely plug-inként érhető el a Smarty-ból.

function smarty_modifier_count_characters($string, $include_spaces = false)
{
if ($include_spaces)
return(strlen($string));

return preg_match_all("/[^\s]/",$string, $match);
}

Ezekkel a plug-inekkel a smarty lehetőségei igen gyorsan bővíthetőek.

Látható, hogy egy elég összetett és jól bővíthető rendszerrel állunk szemben. Ez a kis szösszenet csak a felszínét súrolta, de remélem, kedvcsinálónak elég volt. Ha lesz rá igény, akkor folytatom a táblázatkezeléssel.

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.