Developer(s) | Monte Ohrt, Messju Mohr |
---|---|
Stable release | 3.1.4 / October 19, 2011 |
Written in | PHP |
Type | Template Engine |
License | LGPL |
Website | www.smarty.net |
Smarty is a web template system written in PHP. Smarty is primarily promoted as a tool for separation of concerns.[1] Smarty is intended to simplify compartmentalization, allowing the presentation of a web page to change separately from the back-end. Ideally, this eases the costs and efforts associated with software maintenance.
Smarty generates web content by the placement of special Smarty tags within a document. These tags are processed and substituted with other code. Tags are directives for Smarty that are enclosed by template delimiters. These directives can be variables, denoted by a dollar sign ($), functions, logical or loop statements. Smarty allows PHP programmers to define custom functions that can be accessed using Smarty tags.
Contents |
Smarty supports several high-level template programming features, including:[2]
along with other features. There are other template engines and frameworks that also support these features. Smarty templates can be incorporated into existing PHP web applications. It is used where a web application or a website has a theme system built into it, where the templates can be changed from theme to theme.
Smarty has been criticized for replicating features that PHP does natively very well, which leads to inefficiency.[3] Not only does Smarty require learning a new pseudo-language, it creates additional work for the processor. It is also seen as a poor replacement for full PHP frameworks, which have the benefits of Smarty without added complexity.[4] Despite Smarty's flaws, including bugs and its superfluous nature within PHP frameworks, some developers still use it in conjunction with frameworks.[5]
Since Smarty separates PHP from HTML, there are two files — one contains the presentation code: an HTML template, including Smarty variables and tags which might look like this:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html> <head> <title>{$title_text|escape}</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head> <body> {* This is a little comment that won't be visible in the HTML source *} {$body_html} </body><!-- this is a little comment that will be seen in the HTML source --> </html>
The business logic to use the Smarty template above could be as follows:
define('SMARTY_DIR', 'smarty-2.6.22/' ); require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = './templates/'; $smarty->compile_dir = './templates/compile/'; $smarty->assign('title_text', 'TITLE: This is the Smarty basic example ...'); $smarty->assign('body_html', '<p>BODY: This is the message set using assign()</p>'); $smarty->display('index.tpl');