
Comparing changes: https://github.com/smarty-php/smarty/compare/v4.3.1...v4.4.1 It is noticeable that Smarty 4.3.1 does not officially support PHP 8.3. Is only supported with 4.4.0. Remark: During tests with Smarty 4.5.1, it was noticed that the following warning occurs: Deprecated: Using the unregistered function "function_exists" in a template is deprecated and will be removed in a future version. Use Smarty::registerPlugin to explicitly register a custom modifier. As of Smarty 5.X.X, templates must be revised again. The Smarty release 5.0.2 is already officially available. However, integration into FlatPress is not entirely trivial.
153 lines
7.2 KiB
Markdown
153 lines
7.2 KiB
Markdown
Features
|
|
=======
|
|
|
|
Some of Smarty's features:
|
|
- It is extremely fast.
|
|
- It is efficient since the PHP parser does the dirty work.
|
|
- No template parsing overhead, only compiles once.
|
|
- It is smart about [recompiling](#variable.compile.check) only the
|
|
template files that have changed.
|
|
- You can easily create your own custom
|
|
[functions](#language.custom.functions) and [variable
|
|
modifiers](#language.modifiers), so the template language is
|
|
extremely extensible.
|
|
- Configurable template [{delimiter}](#variable.left.delimiter) tag
|
|
syntax, so you can use `{$foo}`, `{{$foo}}`, `<!--{$foo}-->`, etc.
|
|
- The [`{if}..{elseif}..{else}..{/if}`](#language.function.if)
|
|
constructs are passed to the PHP parser, so the `{if...}` expression
|
|
syntax can be as simple or as complex an evaluation as you like.
|
|
- Allows unlimited nesting of
|
|
[`sections`](#language.function.section), `if's` etc.
|
|
- Built-in [caching](#caching) support
|
|
- Arbitrary [template](#resources) sources
|
|
- [Template Inheritance](#advanced.features.template.inheritance) for
|
|
easy management of template content.
|
|
- [Plugin](#plugins) architecture
|
|
|
|
## Separation of presentation from application code
|
|
- This means templates can certainly contain logic under the condition
|
|
that it is for presentation only. Things such as
|
|
[including](./designers/language-builtin-functions/language-function-include.md) other templates,
|
|
[alternating](./designers/language-custom-functions/language-function-cycle.md) table row colors,
|
|
[upper-casing](./designers/language-modifiers/language-modifier-upper.md) a variable,
|
|
[looping](./designers/language-builtin-functions/language-function-foreach.md) over an array of data and
|
|
rendering it are examples of presentation logic.
|
|
- This does not mean however that Smarty forces a separation of
|
|
business and presentation logic. Smarty has no knowledge of which is
|
|
which, so placing business logic in the template is your own doing.
|
|
- Also, if you desire *no* logic in your templates you certainly can
|
|
do so by boiling the content down to text and variables only.
|
|
|
|
## How does it work?
|
|
|
|
Under the hood, Smarty "compiles" (basically copies and converts) the
|
|
templates into PHP scripts. This happens once when each template is
|
|
first invoked, and then the compiled versions are used from that point
|
|
forward. Smarty takes care of this for you, so the template designer
|
|
just edits the Smarty templates and never has to manage the compiled
|
|
versions. This approach keeps the templates easy to maintain, and yet
|
|
keeps execution times extremely fast since the compiled code is just
|
|
PHP. And of course, all PHP scripts take advantage of PHP op-code caches
|
|
such as APC.
|
|
|
|
## Template Inheritance
|
|
|
|
Template inheritance was introduced in Smarty 3. Before template
|
|
inheritance, we managed our templates in
|
|
pieces such as header and footer templates. This organization lends
|
|
itself to many problems that require some hoop-jumping, such as managing
|
|
content within the header/footer on a per-page basis. With template
|
|
inheritance, instead of including other templates we maintain our
|
|
templates as single pages. We can then manipulate blocks of content
|
|
within by inheriting them. This makes templates intuitive, efficient and
|
|
easy to manage. See
|
|
[Template Inheritance](./programmers/advanced-features/advanced-features-template-inheritance.md)
|
|
for more info.
|
|
|
|
## Why not use XML/XSLT syntax?
|
|
There are a couple of good reasons. First, Smarty can be used for more
|
|
than just XML/HTML based templates, such as generating emails,
|
|
javascript, CSV, and PDF documents. Second, XML/XSLT syntax is even more
|
|
verbose and fragile than PHP code! It is perfect for computers, but
|
|
horrible for humans. Smarty is about being easy to read, understand and
|
|
maintain.
|
|
|
|
## Template Security
|
|
Although Smarty insulates you from PHP, you still have the option to use
|
|
it in certain ways if you wish. Template security forces the restriction
|
|
of PHP (and select Smarty functions.) This is useful if you have third
|
|
parties editing templates, and you don't want to unleash the full power
|
|
of PHP or Smarty to them.
|
|
|
|
## Integration
|
|
Sometimes Smarty gets compared to Model-View-Controller (MVC)
|
|
frameworks. Smarty is not an MVC, it is just the presentation layer,
|
|
much like the View (V) part of an MVC. As a matter of fact, Smarty can
|
|
easily be integrated as the view layer of an MVC. Many of the more
|
|
popular ones have integration instructions for Smarty, or you may find
|
|
some help here in the forums and documentation.
|
|
|
|
## Other Template Engines
|
|
Smarty is not the only engine following the *"Separate Programming Code
|
|
from Presentation"* philosophy. For instance, Python has template
|
|
engines built around the same principles such as Django Templates and
|
|
CheetahTemplate. *Note: Languages such as Python do not mix with HTML
|
|
natively, which give them the advantage of proper programming code
|
|
separation from the outset. There are libraries available to mix Python
|
|
with HTML, but they are typically avoided.*
|
|
|
|
## What Smarty is Not
|
|
|
|
Smarty is not an application development framework. Smarty is not an
|
|
MVC. Smarty is not an alternative to Laravel, Symfony, CodeIgniter,
|
|
or any of the other application development frameworks for PHP.
|
|
|
|
Smarty is a template engine, and works as the (V)iew component of your
|
|
application. Smarty can easily be coupled to any of the engines listed
|
|
above as the view component. No different than any other software,
|
|
Smarty has a learning curve. Smarty does not guarantee good application
|
|
design or proper separation of presentation, this still needs to be
|
|
addressed by a competent developer and web designer.
|
|
|
|
## Is Smarty Right for Me?
|
|
|
|
Smarty is not meant to be a tool for every job. The important thing is
|
|
to identify if Smarty fits your needs. There are some important
|
|
questions to ask yourself:
|
|
|
|
### Template Syntax
|
|
Are you content with PHP tags mixed with HTML? Are your
|
|
web designers comfortable with PHP? Would your web designers prefer a
|
|
tag-based syntax designed for presentation? Some experience working with
|
|
both Smarty and PHP helps answer these questions.
|
|
|
|
### The Business Case
|
|
Is there a requirement to insulate the templates from
|
|
PHP? Do you have untrusted parties editing templates that you do not
|
|
wish to unleash the power of PHP to? Do you need to programmatically
|
|
control what is and is not available within the templates? Smarty
|
|
supplies these capabilities by design.
|
|
|
|
## Feature set
|
|
Does Smarty's features such as caching, template
|
|
inheritance and plugin architecture save development cycles writing code
|
|
that would be needed otherwise? Does the codebase or framework you plan
|
|
on using have the features you need for the presentation component?
|
|
|
|
## Sites using Smarty
|
|
Many well-known PHP projects make use of Smarty such as XOOPS CMS, CMS Made Simple, Tiki
|
|
CMS/Groupware and X-Cart to name a few.
|
|
|
|
## Summary
|
|
Whether you are using Smarty for a small website or massive enterprise
|
|
solution, it can accommodate your needs. There are numerous features
|
|
that make Smarty a great choice:
|
|
|
|
- separation of PHP from HTML/CSS just makes sense
|
|
- readability for organization and management
|
|
- security for 3rd party template access
|
|
- feature completeness, and easily extendable to your own needs
|
|
- massive user base, Smarty is here to stay
|
|
- LGPL license for commercial use
|
|
- 100% free to use, open source project
|