Getting Started Overview What 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 support Arbitrary template sources Custom cache handling functions Plugin architecture How Smarty works Compiling 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. Installation Requirements 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. Constants SMARTY_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");