Copyright PHP Conf., 2003, Szabó Dénes A Smarty sablon rendszer bemutatása Szabó Dénes Első magyarországi PHP Konferencia 2003.

Slides:



Advertisements
Hasonló előadás
Szerver oldali programozás
Advertisements

Az MVC tervezési minta 2. előadás.
Adaptív megjelenítés a WPF layout rendszer segítségével.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
JavaScript.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A CLIPS keretrendszer CLIPS "C" Language Integration Production System.
WEB Technológiák Dr. Pance Miklós – Kolcza Gábor Miskolci Egyetem.
VFP programozása report készítése menü készítése dinamikus elemek
Közös kinézet Mester oldal, témák, skin-ek, css Webalkalkalmazás fejlesztése ASP.NET-ben Krizsán Zoltán.
PHP Webprogramozás alapjai
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
C++ Alapok, első óra Elemi típusok Vezérlési szerkezetek
Szombathely Dinamikus WEB programozás: PHP és JSP.
Vizuális és web programozás II.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
WEB Technológiák ISAPI ME Általános Informatikai Tsz. dr. Kovács László.
WEB Technológiák WEB-DB és XML ME Általános Informatikai Tsz. dr. Kovács László.
Operációs rendszerek gyakorlat 4. Gyakorlat Vakulya Gergely.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
PHP VII Sütik, munkamenetek. Sütik Mi az a süti? A süti (cookie) állapotot tárol a felhasználó böngészőjében. Pl. ha egy oldalon beállítható, hogy milyen.
Webes Információs Rendszerek fejlesztése
A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú, számítógépes szkriptnyelv, legfőbb felhasználási területe a dinamikus weboldalak készítése. Emiatt.
Tömbök és programozási tételek
1.3. Pascal program felépítése Az els ő program. Program ; … Begin … End. Program fej Deklarációs rész Végrehajtó rész.
Előadóról Név: Zumpf Tamás
PHP oktatási tapasztalatok
Portálrendszerek és biztonság Bártházi András Első Magyarországi PHP Konferencia március 29. Copyright PHP Konferencia, 2003,
Fejlesztés PHP-NUKE portál rendszerre Horváth Zoltán Második Magyarországi PHP Konferencia március 27. Copyright PHP Konferencia,
Objektum orientált programozás a gyakorlatban
Készítette: Csíki Gyula
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Készítette: Lipp Marcell
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
4. előadás.  Általánosan a modellről  Table Data Gateway Pattern  A modellosztályok áttekintése  Zend_Db modellek nélkül  Controllerek ismét  Action-ök,
Web fejlesztés V. Illés Zoltán ELTE Informatikai Kar
HTML 2. Űrlapok
Egyenesvonalú (lineáris) adatszerkezetek
Webprogramozó tanfolyam
Funkciós blokkok A funkciós blokkok áttekintése Az alkalmazás előnyei.
Power Lutár Patrícia Pellek Krisztián.  -ltLess than  -leLess than or equal to  -gtGreater than  -geGreater than or equal to  -eqEqual to  -neNot.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Illés Zoltán ELTE Informatikai Kar
Spanyolország gyöngyszeme: GRANADA Egy hobby portál kivitelezése.
Így készült... a drupal6themes.com. 2 Miről lesz szó? Ötlet Célok Megoldások Problémák és hiányosságok További ötletek és tervek.
Webprogramozó tanfolyam
OpenCMS programozói bevezetés Krizsán Zoltán iit me.
Kiterjesztések szemantikája: Szemantikai tartomány : Adatoknak, vagy értékeknek egy nem üres halmazát szemantikai tartománynak nevezzük. Jelölése: D. Egy.
Szerver oldali programozás
Script nyelvek előadás
Webprogramozó tanfolyam
Script nyelvek előadás
Script nyelvek előadás
„Designer-barát” játéklogika
A CLIPS keretrendszer
Kulcsrakész Közgyűjteményi Portál
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
Függvénysablonok használata
Előadás másolata:

Copyright PHP Conf., 2003, Szabó Dénes A Smarty sablon rendszer bemutatása Szabó Dénes Első magyarországi PHP Konferencia március 29.

Copyright PHP Conf., 2003, Szabó DénesTartalom Bevezető A feladat Sablon megoldások Smarty jellemzői (1) Smarty jellemzői (2) Miért jó sablon rendszert használni? Egy egyszerű példa Változó módosítók Asszociatív tömbök Indexelt tömbök használata If/elseif/then/else szerkezet Foreach Plugin rendszer Saját módosító példa Elő szűrő példa Utó szűrő példa Kimenet szűrő példa Fordításról Miért használjuk a Smarty-t? Applikációs, és megjelenítési logika Logika a sablonban Logika a sablonban (2) Érvek és ellenérvek

Copyright PHP Conf., 2003, Szabó DénesBevezető Webes alkalmazás fejlesztés Elmélet Grafikus - design, felület – HTML Programozó - feltölti a HTML-t a megfelelő programmal (business logic) Gyakorlat megrendelő változtat változik a logika, változik a megjelenés Ki dolgozik, és ki vár a másikra?

Copyright PHP Conf., 2003, Szabó Dénes A feladat Feladat: függetlenné tenni a PHP programot a megjelenítéstől Ellentmondás: a PHP „ HTML-be ágyazott szkript nyelv ” Különválasztani a megjelenítést a kódtól „ jó dolog ” (Good Thing TM ) Külön programozó, és külön grafikus alkalmazása

Copyright PHP Conf., 2003, Szabó Dénes Miért jó sablon rendszert használni? A kód és a megjelenítés szétválasztása általában külön feladat, külön ember több rétegű alkalmazások készítése (MVC modell) Tisztább, logikusabb szerkezet Biztonság (a grafikus nem fér hozzá semmiképp a kódhoz) Gyors felület csere

Copyright PHP Conf., 2003, Szabó Dénes Sablon megoldások Sablon rendszerek általában alapvető változó behelyettesítés, egyszerű tag-ek dinamikus blokk funkciók (alapvető ciklusok) minden oldal letöltéskor megtörténik a sablon értelmezése sebesség növelése: a kész, behelyettesített sablon cache-elése PHP nyelven írodott

Copyright PHP Conf., 2003, Szabó Dénes Smarty jellemzői (1) PHP nyelven íródott (PHP osztály) Nagyon gyors Nincs felesleges sablon értelmezés, csak az első lekéréskor fordítás Kiterjeszhetőség saját funkciókkal, módosítókkal Szekciók végtelen egymásba ágyazhatósága (if,foreach, section)

Copyright PHP Conf., 2003, Szabó Dénes Smarty jellemzői (2) A tag elválasztók átdefiniálhatóak ( {},, ) Beépített cache rendszer Saját cache funkciók is beilleszthetőek Többféle sablon forrás (file, db) Plugin rendszer Hatékony Egyszerű szintakszis

Copyright PHP Conf., 2003, Szabó Dénes Egyszerű változó kiíratás Egy egyszerű példa {$title} {$title} Include_once('Smarty.class.php'); define('TPL', 'file:'. APPROOT. 'template1.tpl'); $smarty = new Smarty; $smarty->assign('title', 'Hello PHP konf!' ); $smarty->display( TPL ); Include_once('Smarty.class.php'); define('TPL', 'file:'. APPROOT. 'template1.tpl'); $smarty = new Smarty; $smarty->assign('title', 'Hello PHP konf!' ); $smarty->display( TPL ); Hello PHP konf! Hello PHP konf!

Copyright PHP Conf., 2003, Szabó Dénes Változó módosítók A változó módosítók megváltoztatják a változó tartalmát {$title|upper} {$title|upper} HELLO PHP KONF! HELLO PHP KONF! {$title|spacify} H e l l o P H P k o n f ! {$title|spacify|upper} H E L L O P H P K O N F !

Copyright PHP Conf., 2003, Szabó Dénes Asszociatív tömbök Asszociatív tömbök kezelése $smarty->assign('konf', array( 'hely' => 'Budapest, Cházár A. u. 10.', 'ido' => '2003. március 29. szombat', ' ' => array( 'szervezo' => 'info' => ) ); $smarty->assign('konf', array( 'hely' => 'Budapest, Cházár A. u. 10.', 'ido' => '2003. március 29. szombat', ' ' => array( 'szervezo' => 'info' => ) ); {$konf.ido} {$konf.hely} {$konf. .szervezo} {$konf. .info} {$konf.ido} {$konf.hely} {$konf. .szervezo} {$konf. .info} március 29. szombat Budapest, Cházár A. u március 29. szombat Budapest, Cházár A. u. 10.

Copyright PHP Conf., 2003, Szabó Dénes Indexelt tömbök Indexelt tömbök kezelése $smarty->assign('konf', array( 'Budapest, Cházár A. u. 10.', '2003. március 29. szombat', array( ) ); $smarty->assign('konf', array( 'Budapest, Cházár A. u. 10.', '2003. március 29. szombat', array( ) ); {$konf[0]} {$konf[1]} {$konf[2][0]} {$konf[2][1]} {$konf[0]} {$konf[1]} {$konf[2][0]} {$konf[2][1]} Budapest, Cházár A. u március 29. szombat Budapest, Cházár A. u március 29. szombat

Copyright PHP Conf., 2003, Szabó Dénes If/elseif/then/else szerkezet Üres változónak értékadás {if $name eq "boss"} Szia Admin! {elseif $name ne ""} Szia Kedves felhasználó! {else} Még nem vagy bejelentkezve! {/if} {if $name eq "boss"} Szia Admin! {elseif $name ne ""} Szia Kedves felhasználó! {else} Még nem vagy bejelentkezve! {/if} {if $name eq ""} {assign var="name" value="Ismeretlen"} {/if} {if $name eq ""} {assign var="name" value="Ismeretlen"} {/if} {$name|default:"Ismeretlen"}

Copyright PHP Conf., 2003, Szabó DénesForeach Tömb értékek kiíratása ciklusban $smarty->assign('users', array( array('name' => 'bob', 'phone' => ' '), array('name' => 'jim', 'phone' => ' '), array('name' => 'joe', 'phone' => ' '), array('name' => 'jerry', 'phone' => ' '), array('name' => 'fred', 'phone' => ' ') )); $smarty->assign('users', array( array('name' => 'bob', 'phone' => ' '), array('name' => 'jim', 'phone' => ' '), array('name' => 'joe', 'phone' => ' '), array('name' => 'jerry', 'phone' => ' '), array('name' => 'fred', 'phone' => ' ') )); {foreach name=ulist from=$users item=user key=row} {$user.name} {$user.phone} {/foreach} {foreach name=ulist from=$users item=user key=row} {$user.name} {$user.phone} {/foreach} bob jim joe jerry fred bob jim joe jerry fred

Copyright PHP Conf., 2003, Szabó Dénes Plugin rendszer Smarty sajátosság Plugin típusok Funkciók (cycle) Módosítók (upper, capitalise) Szűrők Fordítás előtti (pre filters) Fordítás utáni (post filters) Kimeneti szűrők (output filters) A szűrőket kell csak külön betölteni

Copyright PHP Conf., 2003, Szabó Dénes Saját módosító példa Egy egyszerű példa módosító pluginre Function smarty_modifier_hu_article($string, $firstupper=FALSE) { $consonants = array( 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z' ); $str =strtolower( ltrim( $string ) ); if ( $firstupper ) { $a = 'A';} else { $a= 'a';} if ( in_array( $str[0], $consonants) ) { return $a. ' '. $string; } return $a. 'z '. $string; } Function smarty_modifier_hu_article($string, $firstupper=FALSE) { $consonants = array( 'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'z' ); $str =strtolower( ltrim( $string ) ); if ( $firstupper ) { $a = 'A';} else { $a= 'a';} if ( in_array( $str[0], $consonants) ) { return $a. ' '. $string; } return $a. 'z '. $string; } {assign var="fiu" value="Géza"} {assign var="lany" value="Erzsébet"} {$fiu|hu_article:true} férfi név. {$lany|hu_article:true} női név. {assign var="fiu" value="Géza"} {assign var="lany" value="Erzsébet"} {$fiu|hu_article:true} férfi név. {$lany|hu_article:true} női név. A Géza férfi név. Az Erzsébet női név. A Géza férfi név. Az Erzsébet női név.

Copyright PHP Conf., 2003, Szabó Dénes Elő szűrő példa Megjegyéseket eltávolító szűrő A funkció elnevezésének kötött a szintakszisa Külön bejegyzés kell a Smartynak a funkcióról Csak egyszer végzi el a tisztázást Function _smarty_remove_dw_comments($tpl_source, &$smarty) { $pattern = array( "/ \s*?/Us", ); $item = array ( '', ); return preg_replace($pattern, $item, $tpl_source); } $smarty->register_prefilter("_smarty_remove_dw_comments"); Function _smarty_remove_dw_comments($tpl_source, &$smarty) { $pattern = array( "/ \s*?/Us", ); $item = array ( '', ); return preg_replace($pattern, $item, $tpl_source); } $smarty->register_prefilter("_smarty_remove_dw_comments");

Copyright PHP Conf., 2003, Szabó Dénes Utó szűrő példa Megjegyés beillesztése a lefordított sablonba A funkció elnevezésének kötött a szintakszisa Külön bejegyzés kell a Smartynak a funkcióról Csak egyszer végzi el a tisztázást function add_header_comment($tpl_source, &$smarty) { return " \n\" ?>\n".$tpl_source; } // register the postfilter $smarty->register_postfilter("add_header_comment"); function add_header_comment($tpl_source, &$smarty) { return " \n\" ?>\n".$tpl_source; } // register the postfilter $smarty->register_postfilter("add_header_comment"); {* a sablon többi része *} {* a sablon többi része *}

Copyright PHP Conf., 2003, Szabó Dénes Kimenet szűrő példa címek védelme A funkció elnevezésének kötött a szintakszisa Külön bejegyzés kell a Smartynak a funkcióról Minden lapletöltéskor dolgozik a szűrő Function protect_ ($tpl_output, &$smarty) { $tpl_output = preg_replace( '$1@$2', $tpl_output); return $tpl_output; } // register the outputfilter $smarty->register_outputfilter("protect_ "); $smarty->assign(' ', ); Function protect_ ($tpl_output, &$smarty) { $tpl_output = preg_replace( '$1@$2', $tpl_output); return $tpl_output; } // register the outputfilter $smarty->register_outputfilter("protect_ "); $smarty->assign(' ', ); szerverzok@phpconf.hu

Copyright PHP Conf., 2003, Szabó DénesFordításról Értelmezi a sablon állományt és lefordítja PHP kódra, de csak azt használja, ami kell Gyakorlatilag tiszta PHP fut A fordítás automatikusan történik A fordítás sablon változáskor automatikus Lefordított sablon a templates_c/ könyvtárban Csökken a szerver terheltsége Megmarad a PHP sebessége _load_plugins(array( array('function', 'assign', 'file:/mnt/cipelo/public_html/phpconf- smarty/template-outputfilter- .tpl', 8, false), array('modifier', 'hu_article', 'file:/mnt/cipelo/public_html/phpconf- smarty/template-outputfilter- .tpl', 10, false),)); ?> Smarty _plugins['function']['assign'][0](array('var' => 'fiu','value' => 'Béla'), $this) ; ?> _plugins['function']['assign'][0](array('var' => 'lany','value' => 'Erzsébet'), $this) ; ?> _run_mod_handler('hu_article', true, $this- >_tpl_vars['fiu'], true); ?> férfi név. _run_mod_handler('hu_article', true, $this- >_tpl_vars['lany'], true); ?> női név. _tpl_vars[' ']; ?> _load_plugins(array( array('function', 'assign', 'file:/mnt/cipelo/public_html/phpconf- smarty/template-outputfilter- .tpl', 8, false), array('modifier', 'hu_article', 'file:/mnt/cipelo/public_html/phpconf- smarty/template-outputfilter- .tpl', 10, false),)); ?> Smarty _plugins['function']['assign'][0](array('var' => 'fiu','value' => 'Béla'), $this) ; ?> _plugins['function']['assign'][0](array('var' => 'lany','value' => 'Erzsébet'), $this) ; ?> _run_mod_handler('hu_article', true, $this- >_tpl_vars['fiu'], true); ?> férfi név. _run_mod_handler('hu_article', true, $this- >_tpl_vars['lany'], true); ?> női név. _tpl_vars[' ']; ?>

Copyright PHP Conf., 2003, Szabó Dénes Miért használjuk a Smarty-t? Grafikus nem tud megzavarni az alkalmazás logikát Különválasztott prezentációs szint, prezentációs logika. Egyszerű új felület építés Programozónak nem kell a megjelenítéssel foglalkoznia Grafikusnak nem kell törődnie azzal, hogy az átadott tartalom hogyan jut el a sablonba Nincs lehetőség a szerveren nem ellenőrzött kód futtatására (biztonság)

Copyright PHP Conf., 2003, Szabó Dénes Applikációs, és megjelenítési logika A kód szétválasztás nem jelenti a logika szétválasztását is! Külön megjelenítési logika (táblázat sor színek) A megjelenítési logika az, amivel a programozónak nem kell törődnie A programozó átadja a tartalmat a megjelenítési rétegnek Sablon tartalmazza a megjelenítési logikát

Copyright PHP Conf., 2003, Szabó Dénes Logika a sablonban A logika szétválasztás nem jelenti azt, hogy nem lehet alkalmazás logika a kódban rossz megoldás Applikációs kód, döntések a grafikusnál jó megoldás döntés belül történik az alkalmazásban {if $smarty.session.user and ( $editor_flag eq "Y" or $user_type eq "admin" )} {/if} {if $smarty.session.user and ( $editor_flag eq "Y" or $user_type eq "admin" )} {/if} {if $display_edit_section } {/if} {if $display_edit_section } {/if}

Copyright PHP Conf., 2003, Szabó Dénes Logika a sablonban, saját funkciók Saját funkciókkal le lehet egyszerüsíteni a grafikus dolgát Változik a kód, de nem változik a sablon Változott a hivatkozás {html_link type="article" id="artcl123" text="Ugrás a címlapra"} Ugrás a címlapra {html_link type="article" id="artcl123" text="Ugrás a címlapra"} Ugrás a címlapra {html_link type="article" id="artcl123" text="Ugrás a címlapra"} Ugrás a címlapra {html_link type="article" id="artcl123" text="Ugrás a címlapra"} Ugrás a címlapra

Copyright PHP Conf., 2003, Szabó Dénes Érvek és ellenérvek Miért használjam? {$title}, jobb mint az A sablon értelmezése lassítja a programot Túl bonyolult a használata Miért tanuljak meg még egy nyelvet (YAL) Bonyolult több állományt karbantartani Az szerkesztőm nem támogatja a Smarty-t, nem tetszik a { }

Copyright PHP Conf., 2003, Szabó Dénes Köszönöm Szabó Dénes Első magyarországi PHP Konferencia március 29. A Smarty sablon rendszer bemutatása