Smart

Smart
Sorts Kompilerande mallprocessor
Utvecklaren New Digital Group Inc.
Skrivet i PHP [2]
Operativ system Programvara för flera plattformar
Första upplagan 2001 [1]
senaste versionen
Licens GNU LGPL
Hemsida smarty.net

Smarty är en kompileringsmallmotor för PHP , ett av verktygen som låter dig separera applikationslogik och data från presentation i andan av Model-view-controller-konceptet .

Smarty-mallspråket utökar HTML med smarty-taggar som är inbäddade i dokumentet. Dessa taggar kan vara PHP-variabler (möjligen med modifierare, t.ex. {$variable|nl2br} ), funktioner eller grundläggande strukturerade programmeringskonstruktioner som {if …} … {else} … {/if} .

Ett av syftena med Smarty är att separera applikationslogik från presentation. Mallar kan fortfarande innehålla logik, men det måste vara datapresentationslogik . Det ska lösa problem som att koppla ihop andra mallar, växla färgning av rader i en tabell, konvertera bokstäver till versaler, cykla genom en array för att visa den, etc. Smarty-biblioteket i sig tvingar inte fram separation av applikationslogik och presentation - den korrekta disciplin med hjälp av webbmallar är upp till utvecklaren.

Smarty är det första mallbiblioteket som använder en bytecode -cachemekanism .

Funktioner

Smarty låter dig:

För att göra det enklare att bygga skalbara webbapplikationer har Smarty en inbyggd cachningsmekanism .

Verkningsmekanism

Smarty läser mallfiler och genererar PHP -kod baserat på dem. Koden skapas en gång och exekveras sedan bara, så det finns inget behov av att bearbeta en mallfil för varje begäran och varje mall kan dra full nytta av PHP -bytecode - cachetillägg som eAccelerator eller PHP Accelerator . Smarty var förmodligen det första mallbiblioteket som använde en sådan mekanism. Senare dök många analoger upp, med användning av både smarty-liknande mallsyntax (som Twig eller Quicky ), och andra tillvägagångssätt för mallsyntax.

Att kompilera mallar uppnår prestanda som är jämförbar med handskrivna PHP-mallar [40] . If/elseif/else/endif-konstruktionerna skickas till PHP-hanteraren, så syntaxen för uttrycket {if ...} kan vara så enkelt eller så komplext som önskas. Obegränsad häckning av sektioner, förhållanden etc. är möjlig.

Exempelkod

HTML-sida med Smarty-taggar:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> < html > < head > < title > {$title_text} </ title > < meta http-equiv = "content-type" content = "text/html; charset=iso-8859-1" /> </ head > < body > {* Kommentar som inte kommer att finnas i HTML-koden *} < p > {$body_text} </ p > </ body > <!-- Kommentaren som kommer att finnas i HTML-koden --> </ html >

Arbetets logik i PHP-skriptet är nedan:

define ( 'SMARTY_DIR' , 'smarty-2.6.22/' ); require_once ( SMARTY_DIR . 'Smarty.class.php' ); $smarty = new Smarty (); $smarty -> template_dir = './mallar/' ; $smarty -> compile_dir = './templates/compile/' ; $smarty -> cache_dir = './templates/cache/' ; $smarty -> caching = false ; $smarty -> error_reporting = E_ALL ; // LÄMNA E_ALL UNDER UTVECKLING $smarty -> debugging = true ; $smarty -> assign ( 'title_text' , 'TITLE: Smart exempel ...' ); $smarty -> assign ( 'body_text' , 'BODY: Detta är texten som matas ut av assign()' ); $smarty -> display ( 'index.tpl' );

Kritik

Smarty (och bibliotek baserade på detta tillvägagångssätt) brukar kritiseras från två håll. Förespråkare för att använda en delmängd av PHP som ett mallspråk hävdar att eftersom "det i grunden tillhandahåller ett gränssnitt till PHP med en ny syntax" och därför ger små fördelar. [41] XSLT- förespråkare tycker att Smarty lämnar för mycket utrymme för att blanda logik och presentation, vilket gör smarty-mallar mycket svårare för tredje part att redigera och återanvända . [42] .

Analoger

Sedan 2008 har en efterföljare av Smarty-syntaxen funnits tillgänglig, Quicky -mallmotorn [43] , vars huvudsakliga utmärkande egenskap är ett annat tillvägagångssätt för implementering av mallanalys (som enligt författaren fungerar mycket snabbare) och en förlängning av syntaxen som redan är bekant för många: stöd för hjälpare (funktioner som deklareras direkt i mallen), närvaron av "magiska" loopkonstanter, en förenklad syntax för att tilldela variabelvärden utan att använda {math}, kompilerbara kontrollstrukturer.

En intressant utveckling av Smarty-idéer är Twig- biblioteket , som utvecklas och underhålls av Fabien Potencier, huvudutvecklaren och ideologen för Symfony [44] .

Mallhanterare som Dwoo [45] eller hanteraren inbyggd i eZ Publish / ezComponents smarty- liknande syntax

Fram till 2007 utvecklades också en "lätt" gaffel av Smarty - Template Lite [46] (i de första versionerna av Smarty Light).

2013 släpptes den första utgåvan av Fenom -mallmotorn [47] som stöder Smarty-liknande syntax. Ett utmärkande drag för mallmotorn är mallanalys, som sker utan användning av reguljära uttryck, men baseras på den inbyggda tokenizern [48] , vilket gör mallparsningen snabb och själva mallmotorn enkel.

Anteckningar

  1. https://web.archive.org/web/20010128152400/http://www.phpinsider.com/php/code/Smarty/docs/
  2. Det smarta Open Source-projektet på Open Hub: Languages-sidan - 2006.
  3. Release 3.1.27 - 2015.
  4. Smarty 3.1.29 släppt - 2015.
  5. Release 3.1.29 - 2015.
  6. Release 3.1.33 - 2018.
  7. Release 2.6.30 - 2016.
  8. Release 2.6.31 - 2017.
  9. Release 3.1.24 - 2015.
  10. Release 3.1.25 - 2015.
  11. Release 3.1.26 - 2015.
  12. Release 3.1.28 - 2015.
  13. Release 3.1.30 - 2016.
  14. Release 3.1.31 - 2016.
  15. Release 3.1.32 - 2018.
  16. Release 3.1.34 - 2019.
  17. Release 3.1.35 - 2020.
  18. Release 3.1.36 - 2020.
  19. Release 3.1.37 - 2021.
  20. Release 3.1.38 - 2021.
  21. Release 3.1.39 - 2021.
  22. https://github.com/smarty-php/smarty/releases/tag/v4.0.0 - 2021.
  23. https://github.com/smarty-php/smarty/releases/tag/v4.0.4 - 2022.
  24. https://github.com/smarty-php/smarty/releases/tag/v4.2.1 - 2022.
  25. Release 2.6.32 - 2021.
  26. Release 3.1.40 - 2021.
  27. Release 3.1.41 - 2022.
  28. Release 3.1.42 - 2022.
  29. Release 3.1.43 - 2022.
  30. Release 3.1.44 - 2022.
  31. Release 3.1.45 - 2022.
  32. Release 3.1.46 - 2022.
  33. Release 3.1.47 - 2022.
  34. Utgåva 4.0.1 - 2022.
  35. Utgåva 4.0.2 - 2022.
  36. Utgåva 4.0.3 - 2022.
  37. Utgåva 4.1.0 - 2022.
  38. Utgåva 4.1.1 - 2022.
  39. Utgåva 4.2.0 - 2022.
  40. Fabien Potencier. Mallmotorer i PHP 2016______MachineWaybackpå2013januari17Arkiverade Wayback Machine )
  41. Brian Lozier. Mallmotorer . Hämtad 9 oktober 2010. Arkiverad från originalet 27 september 2010.
  42. Rehabilitering av XML/XSLT-teknik Arkiverad kopia av 7 augusti 2016 på Wayback Machine , artikel av UMI.CMS- chef Sergey Kotyrev på Habrahabr
  43. Quicky Arkiverad 7 januari 2014 på Wayback Machine ( Dokumentation Arkiverad 2 augusti 2010 på Wayback Machine )
  44. se även hans Comparative Review of PHP Template Engines: Del 1 Arkiverad 17 januari 2013 på Wayback Machine / arkiverad 7 augusti 2016 på Wayback Machine , del 2 Arkiverad 4 december 2012 på Wayback Machine / översatt Arkiverad kopia daterad 7 augusti 2016 på Wayback Machine
  45. Dwoo (nedlänk) . Hämtad 23 oktober 2010. Arkiverad från originalet 27 oktober 2010. 
  46. Mall Lite . Hämtad 23 oktober 2010. Arkiverad från originalet 14 november 2010.
  47. Fenom
  48. Fenom. Hur det fungerar , Fenoms huvuddokumentation

Litteratur

  • João Prado Maia, Hasin Hayder, Lucian Gheorghe, Lucian Gheorge. Smarty: PHP-mallprogrammering och applikationer. - Packt Publishing, 2006. - 256 sid. — ISBN 978-1904811404 .

Länkar