Smarty is a template engine for PHP, facilitating the separation of presentation (HTML/CSS) from application logic.

View the Project on GitHub smarty-php/smarty


What is Smarty?

Smarty is a template engine for PHP. More specifically, it facilitates a manageable way to separate application logic and content from its presentation. This is best described in a situation where the application programmer and the template designer play different roles, or in most cases are not the same person.

For example, let's say you are creating a web page that is displaying a newspaper article.


The Smarty design was largely driven by these goals:

Two camps of thought

When it comes to templating in PHP, there are basically two camps of thought. The first camp exclaims that "PHP is a template engine". This approach simply mixes PHP code with HTML. Although this approach is fastest from a pure script-execution point of view, many would argue that the PHP syntax is messy and complicated when mixed with tagged markup such as HTML.

The second camp exclaims that presentation should be void of all programming code, and instead use simple tags to indicate where application content is revealed. This approach is common with other template engines (even in other programming languages), and is also the approach that Smarty takes. The idea is to keep the templates focused squarely on presentation, void of application code, and with as little overhead as possible.

Why is separating PHP from templates important?

Two major benefits:

Web designers and PHP

A common question: “Web designers have to learn a syntax anyway, why not PHP?” Of course web designers can learn PHP, and they may already be familiar with it. The issue isn’t their ability to learn PHP, it is about the consequences of mixing PHP with HTML. If designers use PHP, it is too easy to add code into templates that doesn’t belong there (you just handed them a swiss-army knife when they just needed a knife.) You can teach them the rules of application design, but this is probably something they don’t really need to learn (now they are developers!) The PHP manual is also an overwhelming pile of information to sift through. It is like handing the owner of a car the factory assembly manual when all they need is the owners manual. Smarty gives web designers exactly the tools they need, and gives developers fine-grained control over those tools. The simplicity of the tag-based syntax is also a huge welcome for designers, it helps them streamline the organization and management of templates.