Jump to content

Smarty (template engine)

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Cf (talk | contribs) at 14:28, 13 August 2008 (Undid revision 231656392 by 121.247.146.166 (talk)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Smarty Templates
Developer(s)Monte Ohrt, Messju Mohr
Stable release
2.6.19 / 11th Feb 2008
Repository
TypeTemplate Engine
LicenseLGPL
Websitewww.smarty.net

Smarty is a web template system written in PHP. Smarty is primarily promoted as a tool for separation of concerns, which is a common design strategy for certain kinds of applications.[1][2]

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, or logical or control flow statements. Smarty allows PHP programmers to define functions that can be accessed using Smarty tags.

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. Under successful application of this development strategy, designers are shielded from the back-end coding, and PHP programmers are shielded from the presentation coding.

Smarty supports several high-level template programming features, including:

  • Control flow statements, foreach
  • if, elseif, else
  • variable modifiers - For example {$variable|nl2br}
  • user created functions
  • mathematical evaluation within the template

along with other features. There are other template engines that also support these features. Smarty templates are often incorporated into existing PHP web applications to some extent. More often 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.

Code example

Since Smarty separates PHP from HTML, you have two files:

<!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> {* This is a little comment that won't be visible in the HTML source *}

<p>{$body_text}</p>

</body><!-- this is a little comment that will be seen in the HTML source -->
</html>

In the business logic code you can configure Smarty to use this template:

define('SMARTY_DIR', 'smarty-2.6.9/' );
require_once(SMARTY_DIR . 'Smarty.class.php');

$smarty = new Smarty();
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates/compile/';
$smarty->cache_dir = './templates/cache/';
$smarty->caching = false;
$smarty->error_reporting = E_ALL; // LEAVE E_ALL DURING DEVELOPMENT
$smarty->debugging = true;

$smarty->assign('title_text', 'TITLE: This is the Smarty basic example ...');
$smarty->assign('body_text', 'BODY: This is the message set using assign()');

$smarty->display('index.tpl');

Notes and references

  1. ^ Smarty separates PHP code, (often represented as business logic) from HTML, (often represented as presentation logic).
  2. ^ Parr, Terence John (2004). Enforcing strict model-view separation in template engines. Proceedings of the 13th international conference on World Wide Web. 1-58113-844-X.