Getting StartedOverviewWhat is Smarty?
Smarty is a template engine for PHP. One of the unique aspects about
Smarty is that it compiles the template files into native PHP scripts
upon the first invocation. After that, it just executes the compiled
PHP scripts. Therefore, there is no costly template file parsing for
each request, and each template can take full advantage of PHP compiler
cache solutions such as Zend Cache (http://www.zend.com) or PHP
Accelerator (http://www.php-accelerator.co.uk).
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 only the template
files that have changed.You can make custom
functions and custom variable
modifiers, so the template language is extremely extensible.Configurable template delimiter tag syntax, so you can use
{}, {{}}, <!--{}-->, etc.The if/elseif/else/endif constructs are passed to the
PHP parser, so the {if ...} expression syntax can be as simple or as complex
as you like.Unlimited nesting of sections, ifs, etc. allowed.It is possible to embed PHP code right in your template files,
although this may not be needed (nor recommended)
since the engine is so customizable.Built-in caching supportArbitrary template sourcesCustom cache handling functionsPlugin architectureHow Smarty worksCompiling
Smarty compiles the templates into native PHP code on-the-fly. The actual
PHP scripts that are generated are created implicitly, so theoretically you
should never have to worry about touching these files, or even know of their
existence. The exception to this is debugging Smarty template syntax errors,
discussed later in this document.
Caching
Smarty can cache the output of your generated templates. By default
this is disabled. If you enable
caching, Smarty will store a copy of the generated template
output, and use this until the copy expires, regenerating a new
one. The default cache expire time can be configured from the
class. The exception to the rule is the insert tag. Anything
generated by the insert tag is not cached, but run dynamically on
every invocation, even within cached content.
Technical Note
Any time you change a template, change values in
config files or change the content that gets displayed in a
template, you can turn on compile_check to regenerate the caches
that are affected, or wait for the cache to expire to see the
results of the changes. You clear caches manually by deleting files
from the cache directory, programatically with clear_cache or clear_all_cache, or turn on
$compile_check (or $force_compile).
Technical Note
As of Smarty 1.4.6, if you have caching enabled AND
you have compile_check enabled, the cached file will regenerate if
an involved template or config file has been modified, regardless
of the cache expire time. This results in a slight performance hit
since it has to check the templates and config files for
modification times. Therefore if you are not actively changing
templates or config files, it is advisable to leave compile_check
off. As of Smarty 1.4.7, enabling $force_compile will cause cache
files to always be regenerated.
InstallationRequirements
Smarty requires PHP 4.0.6 or later. See the
BUGS section for caveats.
Installing Smarty
Installing Smarty is fairly straightforward, there are a few things to be
aware of. Smarty creates PHP scripts from the templates. This usually means
allowing user "nobody" (or whomever the web server runs as) to have
permission to write the files. Each installation of a Smarty application
minimally needs a templates directory and a compiled templates directory.
If you use configuration files you will also need a directory for those. By
default these are named "templates", "templates_c" and "configs"
respectively. "templates_c" needs to be writable by the web server user. If
you plan on using caching, you will need to create a "cache" directory,
also with permission to write files.
Technical Note
You can get around the need to allow the web server
user write access to compile templates. Smarty needs to compile the
templates only once. This can be done from the command line, using the
CGI version of PHP. example: "php -q index.php". Once the templates are
compiled, they should run fine from the web environment. If you change
a template, you must recompile from the command line again. If you do
not have the CGI version of PHP available and you are concerned about
world-writable directory access, you can chmod 777 the compile_dir, let
the templates compile once as the web server user, then change the
directory mode to 755. If you are using the caching feature of Smarty,
the cache directory must always have write access for the web server
user.
Technical Note
If you do not have access to the php.ini file, you can
change non-server settings (such as your include_path) with the
ini_set() command (available in PHP 4.0.4 or later.) example:
ini_set("include_path",".:/usr/local/lib/php");
Copy the Smarty.class.php, Smarty.addons.php and Config_File.class.php
scripts to a directory that is in your PHP include_path. NOTE: PHP will
try to create a directory alongside the executing script called
"templates_c". Be sure that directory permissions allow this to happen.
You will see PHP error messages if this fails. You can also create the
directory yourself before hand, and change the file ownership
accordingly. See below.
Technical Note
If you don't want to use include_path to find the
Smarty files, you can set the SMARTY_DIR constant to the full path to
your Smarty library files. Be sure the path ends with a slash!
Example of installing Smarty
# be sure you are in the web server document tree
# this assumes your web server runs as user "nobody"
# and you are in a un*x environment
gtar -zxvf Smarty-[version].tar.gz
mkdir templates_c
chown nobody:nobody templates_c
chmod 700 templates_c
# if you are using caching, do the following
mkdir cache
chown nobody:nobody cache
chmod 700 cache
Next, try running the index.php script from your web browser.
ConstantsSMARTY_DIR
This should be the full system path to the location of the Smarty
class files. If this is not defined, then Smarty will attempt to
determine the appropriate value automatically. If defined, the path
must end with a slash.
SMARTY_DIR
// set path to Smarty directory
define("SMARTY_DIR","/usr/local/lib/php/Smarty/");
require_once(SMARTY_DIR."Smarty.class.php");