| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | Smarty 3.0 Beta | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Author: Monte Ohrt <monte at ohrt dot com > | 
					
						
							|  |  |  | Author: Uwe Tews | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | AN INTRODUCTION TO SMARTY 3 BETA | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-06 22:11:10 +00:00
										 |  |  | NOTICE for BETA 8: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The Smarty 3 API (as of beta 8) has been refactored to a syntax geared | 
					
						
							|  |  |  | for consistency and modularity. The Smarty 2 API syntax is still supported, but | 
					
						
							|  |  |  | will throw a deprecation notice. You can disable the notices, but it is highly | 
					
						
							|  |  |  | recommended to adjust your syntax to Smarty 3, as the Smarty 2 syntax must run | 
					
						
							|  |  |  | through an extra rerouting wrapper. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Basically, all Smarty methods now follow the "fooBarBaz" camel case syntax. Also, | 
					
						
							|  |  |  | all Smarty properties now have getters and setters. So for example, the property | 
					
						
							|  |  |  | $smarty->cache_dir can be set with $smarty->setCacheDir('foo/') and can be | 
					
						
							|  |  |  | retrieved with $smarty->getCacheDir(). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some of the Smarty 3 APIs have been revoked such as the "is*" methods that were | 
					
						
							|  |  |  | just duplicate functions of the now available "get*" methods. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Here is a rundown of the Smarty 3 API: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->fetch($template, $cache_id = null, $compile_id = null, $parent = null) | 
					
						
							|  |  |  | $smarty->display($template, $cache_id = null, $compile_id = null, $parent = null) | 
					
						
							|  |  |  | $smarty->isCached($template, $cache_id = null, $compile_id = null) | 
					
						
							|  |  |  | $smarty->createData($parent = null) | 
					
						
							|  |  |  | $smarty->createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) | 
					
						
							|  |  |  | $smarty->enableSecurity() | 
					
						
							| 
									
										
										
										
											2010-02-08 17:08:09 +00:00
										 |  |  | $smarty->disableSecurity() | 
					
						
							| 
									
										
										
										
											2010-02-06 22:11:10 +00:00
										 |  |  | $smarty->setTemplateDir($template_dir) | 
					
						
							|  |  |  | $smarty->addTemplateDir($template_dir) | 
					
						
							|  |  |  | $smarty->templateExists($resource_name) | 
					
						
							|  |  |  | $smarty->loadPlugin($plugin_name, $check = true) | 
					
						
							|  |  |  | $smarty->loadFilter($type, $name) | 
					
						
							|  |  |  | $smarty->setExceptionHandler($handler) | 
					
						
							|  |  |  | $smarty->addPluginsDir($plugins_dir) | 
					
						
							|  |  |  | $smarty->getGlobal($varname = null) | 
					
						
							|  |  |  | $smarty->getRegisteredObject($name) | 
					
						
							|  |  |  | $smarty->getDebugTemplate() | 
					
						
							|  |  |  | $smarty->setDebugTemplate($tpl_name) | 
					
						
							|  |  |  | $smarty->assign($tpl_var, $value = null, $nocache = false, $scope = SMARTY_LOCAL_SCOPE) | 
					
						
							|  |  |  | $smarty->assignGlobal($varname, $value = null, $nocache = false) | 
					
						
							|  |  |  | $smarty->assignByRef($tpl_var, &$value, $nocache = false, $scope = SMARTY_LOCAL_SCOPE) | 
					
						
							|  |  |  | $smarty->append($tpl_var, $value = null, $merge = false, $nocache = false, $scope = SMARTY_LOCAL_SCOPE) | 
					
						
							|  |  |  | $smarty->appendByRef($tpl_var, &$value, $merge = false) | 
					
						
							|  |  |  | $smarty->clearAssign($tpl_var) | 
					
						
							|  |  |  | $smarty->clearAllAssign() | 
					
						
							|  |  |  | $smarty->configLoad($config_file, $sections = null) | 
					
						
							|  |  |  | $smarty->getVariable($variable, $_ptr = null, $search_parents = true, $error_enable = true) | 
					
						
							|  |  |  | $smarty->getConfigVariable($variable) | 
					
						
							|  |  |  | $smarty->getStreamVariable($variable) | 
					
						
							|  |  |  | $smarty->getConfigVars($varname = null) | 
					
						
							|  |  |  | $smarty->clearConfig($varname = null) | 
					
						
							| 
									
										
										
										
											2010-02-08 17:31:15 +00:00
										 |  |  | $smarty->getTemplateVars($varname = null, $_ptr = null, $search_parents = true) | 
					
						
							| 
									
										
										
										
											2010-02-06 22:11:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // some API calls are moved into their own objects: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->cache->loadResource($type = null) | 
					
						
							|  |  |  | $smarty->cache->clearAll($exp_time = null, $type = null) | 
					
						
							|  |  |  | $smarty->cache->clear($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->register->block($block_tag, $block_impl, $cacheable = true, $cache_attr = array()) | 
					
						
							|  |  |  | $smarty->register->compilerFunction($compiler_tag, $compiler_impl, $cacheable = true) | 
					
						
							|  |  |  | $smarty->register->templateFunction($function_tag, $function_impl, $cacheable = true, $cache_attr = array()) | 
					
						
							|  |  |  | $smarty->register->modifier($modifier_name, $modifier_impl) | 
					
						
							|  |  |  | $smarty->register->templateObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array()) | 
					
						
							|  |  |  | $smarty->register->outputFilter($function_name) | 
					
						
							|  |  |  | $smarty->register->postFilter($function_name) | 
					
						
							|  |  |  | $smarty->register->preFilter($function_name) | 
					
						
							|  |  |  | $smarty->register->resource($resource_type, $function_names) | 
					
						
							|  |  |  | $smarty->register->variableFilter($function_name) | 
					
						
							|  |  |  | $smarty->register->defaultPluginHandler($function_name) | 
					
						
							|  |  |  | $smarty->register->defaultTemplateHandler($function_name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->unregister->block($block_tag) | 
					
						
							|  |  |  | $smarty->unregister->compilerFunction($compiler_tag) | 
					
						
							|  |  |  | $smarty->unregister->templateFunction($function_tag) | 
					
						
							|  |  |  | $smarty->unregister->modifier($modifier) | 
					
						
							|  |  |  | $smarty->unregister->templateObject($object_name) | 
					
						
							|  |  |  | $smarty->unregister->outputFilter($function_name) | 
					
						
							|  |  |  | $smarty->unregister->postFilter($function_name) | 
					
						
							|  |  |  | $smarty->unregister->preFilter($function_name) | 
					
						
							|  |  |  | $smarty->unregister->resource($resource_type) | 
					
						
							|  |  |  | $smarty->unregister->variableFilter($function_name) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->utility->compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) | 
					
						
							|  |  |  | $smarty->utility->clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) | 
					
						
							|  |  |  | $smarty->utility->testInstall() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // then all the getters/setters, available for all properties. Here are a few: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $caching = $smarty->getCaching();      // get $smarty->caching | 
					
						
							|  |  |  | $smarty->setCaching(true);             // set $smarty->caching | 
					
						
							|  |  |  | $smarty->setDeprecationNotices(false); // set $smarty->deprecation_notices | 
					
						
							|  |  |  | $smarty->setCacheId($id);              // set $smarty->cache_id | 
					
						
							|  |  |  | $debugging = $smarty->getDebugging();  // get $smarty->debugging | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FILE STRUCTURE | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The Smarty 3 file structure is similar to Smarty 2: | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /libs/ | 
					
						
							|  |  |  |   Smarty.class.php | 
					
						
							|  |  |  | /libs/sysplugins/ | 
					
						
							|  |  |  |   internal.* | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | /libs/plugins/ | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  |   function.mailto.php | 
					
						
							|  |  |  |   modifier.escape.php | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  |   ... | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-27 15:06:49 +00:00
										 |  |  | A lot of Smarty 3 core functionality lies in the sysplugins directory; you do | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | not need to change any files here. The /libs/plugins/ folder is where Smarty | 
					
						
							|  |  |  | plugins are located. You can add your own here, or create a separate plugin | 
					
						
							|  |  |  | directory, just the same as Smarty 2. You will still need to create your own | 
					
						
							|  |  |  | /cache/, /templates/, /templates_c/, /configs/ folders. Be sure /cache/ and | 
					
						
							|  |  |  | /templates_c/ are writable. | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | The typical way to use Smarty 3 should also look familiar: | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | $smarty->assign('foo','bar'); | 
					
						
							|  |  |  | $smarty->display('index.tpl'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | However, Smarty 3 works completely different on the inside. Smarty 3 is mostly | 
					
						
							|  |  |  | backward compatible with Smarty 2, except for the following items: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | *) Smarty 3 is PHP 5 only. It will not work with PHP 4. | 
					
						
							|  |  |  | *) The {php} tag is disabled by default. Enable with $smarty->allow_php_tag=true. | 
					
						
							|  |  |  | *) Delimiters surrounded by whitespace are no longer treated as Smarty tags. | 
					
						
							|  |  |  |    Therefore, { foo } will not compile as a tag, you must use {foo}. This change | 
					
						
							|  |  |  |    Makes Javascript/CSS easier to work with, eliminating the need for {literal}. | 
					
						
							| 
									
										
										
										
											2009-11-03 15:46:22 +00:00
										 |  |  |    This can be disabled by setting $smarty->auto_literal = false; | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | There are many things that are new to Smarty 3. Here are the notable items: | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  | LEXER/PARSER | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | ============ | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-27 15:06:49 +00:00
										 |  |  | Smarty 3 now uses a lexing tokenizer for its parser/compiler. Basically, this | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | means Smarty has some syntax additions that make life easier such as in-template | 
					
						
							|  |  |  | math, shorter/intuitive function parameter options, infinite function recursion, | 
					
						
							|  |  |  | more accurate error handling, etc. | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | WHAT IS NEW IN SMARTY TEMPLATE SYNTAX | 
					
						
							|  |  |  | ===================================== | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Smarty 3 allows expressions almost anywhere. Expressions can include PHP | 
					
						
							| 
									
										
										
										
											2009-12-27 15:06:49 +00:00
										 |  |  | functions as long as they are not disabled by the security policy, object | 
					
						
							|  |  |  | methods and properties, etc. The {math} plugin is no longer necessary but | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | is still supported for BC. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | Examples: | 
					
						
							| 
									
										
										
										
											2009-11-02 21:20:36 +00:00
										 |  |  | {$x+$y}                           will output the sum of x and y. | 
					
						
							| 
									
										
										
										
											2009-11-02 21:19:57 +00:00
										 |  |  | {$foo = strlen($bar)}             function in assignment | 
					
						
							| 
									
										
										
										
											2009-12-27 15:06:49 +00:00
										 |  |  | {assign var=foo value= $x+$y}     in attributes  | 
					
						
							| 
									
										
										
										
											2009-11-02 21:19:57 +00:00
										 |  |  | {$foo = myfunct( ($x+$y)*3 )}     as function parameter  | 
					
						
							|  |  |  | {$foo[$x+3]}                      as array index | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | Smarty tags can be used as values within other tags. | 
					
						
							|  |  |  | Example:  {$foo={counter}+3} | 
					
						
							| 
									
										
										
										
											2009-08-21 14:50:34 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Smarty tags can also be used inside double quoted strings. | 
					
						
							| 
									
										
										
										
											2009-08-21 14:50:34 +00:00
										 |  |  | Example:  {$foo="this is message {counter}"} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | You can define arrays within templates. | 
					
						
							|  |  |  | Examples: | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | {assign var=foo value=[1,2,3]} | 
					
						
							|  |  |  | {assign var=foo value=['y'=>'yellow','b'=>'blue']} | 
					
						
							|  |  |  | Arrays can be nested. | 
					
						
							|  |  |  | {assign var=foo value=[1,[9,8],3]} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | There is a new short syntax supported for assigning variables. | 
					
						
							|  |  |  | Example: {$foo=$bar+2} | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | You can assign a value to a specific array element. If the variable exists but | 
					
						
							|  |  |  | is not an array, it is converted to an array before the new values are assigned. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | Examples: | 
					
						
							|  |  |  | {$foo['bar']=1} | 
					
						
							|  |  |  | {$foo['bar']['blar']=1} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | You can append values to an array. If the variable exists but is not an array, | 
					
						
							|  |  |  | it is converted to an array before the new values are assigned. | 
					
						
							|  |  |  | Example: {$foo[]=1} | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | You can use a PHP-like syntax for accessing array elements, as well as the | 
					
						
							|  |  |  | original "dot" notation. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | Examples: | 
					
						
							|  |  |  | {$foo[1]}             normal access | 
					
						
							|  |  |  | {$foo['bar']} | 
					
						
							|  |  |  | {$foo['bar'][1]} | 
					
						
							|  |  |  | {$foo[$x+$x]}         index may contain any expression | 
					
						
							|  |  |  | {$foo[$bar[1]]}       nested index | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {$foo[section_name]}  smarty section access, not array access! | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | The original "dot" notation stays, and with improvements. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | Examples: | 
					
						
							| 
									
										
										
										
											2009-11-02 21:19:57 +00:00
										 |  |  | {$foo.a.b.c}        =>  $foo['a']['b']['c']  | 
					
						
							|  |  |  | {$foo.a.$b.c}       =>  $foo['a'][$b]['c']        with variable index | 
					
						
							|  |  |  | {$foo.a.{$b+4}.c}   =>  $foo['a'][$b+4]['c']       with expression as index | 
					
						
							|  |  |  | {$foo.a.{$b.c}}     =>  $foo['a'][$b['c']]         with nested index | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | note that { and } are used to address ambiguties when nesting the dot syntax.  | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Variable names themselves can be variable and contain expressions. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | Examples: | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | $foo         normal variable | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | $foo_{$bar}  variable name containing other variable  | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | $foo_{$x+$y} variable name containing expressions  | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | $foo_{$bar}_buh_{$blar}  variable name with multiple segments | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {$foo_{$x}}  will output the variable $foo_1 if $x has a value of 1. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | Object method chaining is implemented. | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Example: {$object->method1($x)->method2($y)} | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | {for} tag added for looping (replacement for {section} tag): | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | {for $x=0, $y=count($foo); $x<$y; $i++}  ....  {/for} | 
					
						
							|  |  |  | Any number of statements can be used separated by comma as the first | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | inital expression at {for}. | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-03 22:50:05 +00:00
										 |  |  | {for $x = $start to $end step $step} ... {/for}is in the SVN now . | 
					
						
							|  |  |  | You can use also | 
					
						
							|  |  |  | {for $x = $start to $end} ... {/for} | 
					
						
							|  |  |  | In this case the step value will be automaticall 1 or -1 depending on the start and end values. | 
					
						
							|  |  |  | Instead of $start and $end you can use any valid expression. | 
					
						
							|  |  |  | Inside the loop the following special vars can be accessed: | 
					
						
							|  |  |  | $x@iteration = number of iteration | 
					
						
							|  |  |  | $x@total = total number of iterations | 
					
						
							|  |  |  | $x@first = true on first iteration | 
					
						
							|  |  |  | $x@last = true on last iteration | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | The Smarty 2 {section} syntax is still supported. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | New shorter {foreach} syntax to loop over an array. | 
					
						
							|  |  |  | Example: {foreach $myarray as $var}...{/foreach} | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Within the foreach loop, properties are access via: | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | $var@key            foreach $var array key | 
					
						
							|  |  |  | $var@iteration      foreach current iteration count (1,2,3...) | 
					
						
							|  |  |  | $var@index          foreach current index count (0,1,2...) | 
					
						
							|  |  |  | $var@total          foreach $var array total | 
					
						
							|  |  |  | $var@first          true on first iteration | 
					
						
							|  |  |  | $var@last           true on last iteration | 
					
						
							| 
									
										
										
										
											2009-04-05 18:07:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | The Smarty 2 {foreach} tag syntax is still supported. | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | NOTE: {$bar[foo]} still indicates a variable inside of a {section} named foo.  | 
					
						
							|  |  |  | If you want to access an array element with index foo, you must use quotes | 
					
						
							|  |  |  | such as {$bar['foo']}, or use the dot syntax {$bar.foo}. | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | while block tag is now implemented: | 
					
						
							|  |  |  | {while $foo}...{/while} | 
					
						
							|  |  |  | {while $x lt 10}...{/while} | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | Direct access to PHP functions: | 
					
						
							|  |  |  | Just as you can use PHP functions as modifiers directly, you can now access | 
					
						
							|  |  |  | PHP functions directly, provided they are permitted by security settings: | 
					
						
							|  |  |  | {time()} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-27 15:06:49 +00:00
										 |  |  | There is a new {function}...{/function} block tag.  This enables reuse of code | 
					
						
							|  |  |  | sequences like a plugin function. It can call itself recursively. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Example: | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Template file: | 
					
						
							|  |  |  | {function name=menu level=0} | 
					
						
							|  |  |  |   <ul class="level{$level}"> | 
					
						
							|  |  |  |   {foreach $data as $entry} | 
					
						
							|  |  |  |     {if is_array($entry)} | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  |       <li>{$entry@key}</li> | 
					
						
							|  |  |  |        {menu data=$entry level=$level+1} | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  |     {else} | 
					
						
							|  |  |  |       <li>{$entry}</li> | 
					
						
							|  |  |  |     {/if} | 
					
						
							|  |  |  |   {/foreach} | 
					
						
							|  |  |  |   </ul> | 
					
						
							|  |  |  | {/function} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => | 
					
						
							|  |  |  |   ['item3-3-1','item3-3-2']],'item4']} | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | {menu data=$menu} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Generated output: | 
					
						
							|  |  |  |     * item1 | 
					
						
							|  |  |  |     * item2 | 
					
						
							|  |  |  |     * item3 | 
					
						
							|  |  |  |           o item3-1 | 
					
						
							|  |  |  |           o item3-2 | 
					
						
							|  |  |  |           o item3-3 | 
					
						
							|  |  |  |                 + item3-3-1 | 
					
						
							|  |  |  |                 + item3-3-2 | 
					
						
							|  |  |  |     * item4 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | The function tag itself must have the "name" attribute. This name is the tag | 
					
						
							|  |  |  | name when calling the function. The function tag may have any number of | 
					
						
							|  |  |  | additional attributes. These will be default settings for local variables. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | New {nocache} block function: | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {nocache}...{/nocache} will declare a section of the template to be non-cached | 
					
						
							|  |  |  | when template caching is enabled. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-02 14:43:55 +00:00
										 |  |  | New nocache attribute: | 
					
						
							|  |  |  | You can declare variable/function output as non-cached with the nocache attribute. | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Examples: | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {$foo nocache=true} | 
					
						
							|  |  |  | {$foo nocache} /* same */ | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {foo bar="baz" nocache=true} | 
					
						
							|  |  |  | {foo bar="baz" nocache} /* same */ | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {time() nocache=true} | 
					
						
							|  |  |  | {time() nocache} /* same */ | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Or you can also assign the variable in your script as nocache: | 
					
						
							|  |  |  | $smarty->assign('foo',$something,true); // third param is nocache setting | 
					
						
							|  |  |  | {$foo} /* non-cached */ | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | $smarty.current_dir returns the directory name of the current template. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | You can use strings directly as templates with the "string" resource type. | 
					
						
							|  |  |  | Examples: | 
					
						
							|  |  |  | $smarty->display('string:This is my template, {$foo}!'); // php | 
					
						
							|  |  |  | {include file="string:This is my template, {$foo}!"} // template | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | VARIABLE SCOPE / VARIABLE STORAGE | 
					
						
							|  |  |  | ================================= | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | In Smarty 2, all assigned variables were stored within the Smarty object.  | 
					
						
							|  |  |  | Therefore, all variables assigned in PHP were accessible by all subsequent  | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | fetch and display template calls. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | In Smarty 3, we have the choice to assign variables to the main Smarty object,  | 
					
						
							|  |  |  | to user-created data objects, and to user-created template objects.  | 
					
						
							|  |  |  | These objects can be chained. The object at the end of a chain can access all | 
					
						
							|  |  |  | variables belonging to that template and all variables within the parent objects. | 
					
						
							|  |  |  | The Smarty object can only be the root of a chain, but a chain can be isolated | 
					
						
							|  |  |  | from the Smarty object. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | All known Smarty assignment interfaces will work on the data and template objects. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Besides the above mentioned objects, there is also a special storage area for | 
					
						
							|  |  |  | global variables. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | A Smarty data object can be created as follows: | 
					
						
							| 
									
										
										
										
											2010-01-22 16:39:30 +00:00
										 |  |  | $data = $smarty->createData();    // create root data object | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | $data->assign('foo','bar');       // assign variables as usual | 
					
						
							| 
									
										
										
										
											2010-01-22 16:39:30 +00:00
										 |  |  | $data->config_load('my.conf');									 // load config file     | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-22 16:39:30 +00:00
										 |  |  | $data= $smarty->createData($smarty);  // create data object having a parent link to | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | the Smarty object | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-22 16:39:30 +00:00
										 |  |  | $data2= $smarty->createData($data);   // create data object having a parent link to | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | the $data data object | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | A template object can be created by using the createTemplate method. It has the | 
					
						
							|  |  |  | same parameter assignments as the fetch() or display() method. | 
					
						
							|  |  |  | Function definition: | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | The first parameter can be a template name, a smarty object or a data object. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | Examples: | 
					
						
							|  |  |  | $tpl = $smarty->createTemplate('mytpl.tpl'); // create template object not linked to any parent | 
					
						
							| 
									
										
										
										
											2009-11-05 18:22:40 +00:00
										 |  |  | $tpl->assign('foo','bar');                   // directly assign variables | 
					
						
							| 
									
										
										
										
											2010-01-22 16:39:30 +00:00
										 |  |  | $tpl->config_load('my.conf');									 // load config file     | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | $tpl = $smarty->createTemplate('mytpl.tpl',$smarty);  // create template having a parent link to the Smarty object | 
					
						
							|  |  |  | $tpl = $smarty->createTemplate('mytpl.tpl',$data);    // create template having a parent link to the $data object | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | The standard fetch() and display() methods will implicitly create a template object. | 
					
						
							|  |  |  | If the $parent parameter is not specified in these method calls, the template object | 
					
						
							|  |  |  | is will link back to the Smarty object as it's parent. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | If a template is called by an {include...} tag from another template, the | 
					
						
							|  |  |  | subtemplate links back to the calling template as it's parent.  | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | All variables assigned locally or from a parent template are accessible. If the | 
					
						
							|  |  |  | template creates or modifies a variable by using the {assign var=foo...} or | 
					
						
							|  |  |  | {$foo=...} tags, these new values are only known locally (local scope). When the | 
					
						
							|  |  |  | template exits, none of the new variables or modifications can be seen in the | 
					
						
							|  |  |  | parent template(s). This is same behavior as in Smarty 2.  | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | With Smarty 3, we can assign variables with a scope attribute which allows the | 
					
						
							|  |  |  | availablility of these new variables or modifications globally (ie in the parent | 
					
						
							|  |  |  | templates.) | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Possible scopes are local, parent, root and global.  | 
					
						
							|  |  |  | Examples: | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {assign var=foo value='bar'}       // no scope is specified, the default 'local' | 
					
						
							|  |  |  | {$foo='bar'}                       // same, local scope | 
					
						
							|  |  |  | {assign var=foo value='bar' scope='local'} // same, local scope | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {assign var=foo value='bar' scope='parent'} // Values will be available to the parent object  | 
					
						
							|  |  |  | {$foo='bar' scope='parent'}                 // (normally the calling template) | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {assign var=foo value='bar' scope='root'}   // Values will be exported up to the root object, so they can  | 
					
						
							|  |  |  | {$foo='bar' scope='root'}                   // be seen from all templates using the same root. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | {assign var=foo value='bar' scope='global'} // Values will be exported to global variable storage,  | 
					
						
							|  |  |  | {$foo='bar' scope='global'}                 // they are available to any and all templates. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | The scope attribute can also be attached to the {include...} tag. In this case, | 
					
						
							|  |  |  | the specified scope will be the default scope for all assignments within the | 
					
						
							|  |  |  | included template. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PLUGINS | 
					
						
							|  |  |  | ======= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Smarty 3 plugins are now objects that extend Smarty_Internal_PluginBase. All | 
					
						
							|  |  |  | plugins have the property $this->smarty available as a reference to the Smarty | 
					
						
							|  |  |  | object instance. The Smarty 2 function-style plugins are still compatible, you | 
					
						
							|  |  |  | can drop them right into the Smarty 3 plugin directory. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | TEMPLATE INHERITANCE: | 
					
						
							|  |  |  | ===================== | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | With template inheritance you can define blocks, which are areas that can be | 
					
						
							|  |  |  | overriden by child templates, so your templates could look like this:  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | parent.tpl: | 
					
						
							|  |  |  | <html> | 
					
						
							|  |  |  |   <head> | 
					
						
							|  |  |  |     <title>{block name='title'}My site name{/block}</title> | 
					
						
							|  |  |  |   </head> | 
					
						
							|  |  |  |   <body> | 
					
						
							|  |  |  |     <h1>{block name='page-title'}Default page title{/block}</h1> | 
					
						
							|  |  |  |     <div id="content"> | 
					
						
							|  |  |  |       {block name='content'} | 
					
						
							|  |  |  |         Default content | 
					
						
							|  |  |  |       {/block} | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </body> | 
					
						
							|  |  |  | </html> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | child.tpl: | 
					
						
							| 
									
										
										
										
											2009-11-17 19:03:06 +00:00
										 |  |  | {extends file='parent.tpl'}  | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | {block name='title'} | 
					
						
							|  |  |  | Child title | 
					
						
							|  |  |  | {/block} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | grandchild.tpl: | 
					
						
							| 
									
										
										
										
											2009-11-17 19:03:06 +00:00
										 |  |  | {extends file='child.tpl'}  | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | {block name='title'}Home - {$smarty.parent}{/block}  | 
					
						
							|  |  |  | {block name='page-title'}My home{/block} | 
					
						
							|  |  |  | {block name='content'} | 
					
						
							|  |  |  |   {foreach $images as $img} | 
					
						
							|  |  |  |     <img src="{$img.url}" alt="{$img.description}" /> | 
					
						
							|  |  |  |   {/foreach} | 
					
						
							|  |  |  | {/block} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-12 22:13:21 +00:00
										 |  |  | We redefined all the blocks here, however in the title block we used {$smarty.parent}, | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | which tells Smarty to insert the default content from the parent template in its place. | 
					
						
							|  |  |  | The content block was overriden to display the image files, and page-title has also be  | 
					
						
							|  |  |  | overriden to display a completely different title.  | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-12 22:13:21 +00:00
										 |  |  | If we render grandchild.tpl we will get this:  | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | <html> | 
					
						
							|  |  |  |   <head> | 
					
						
							|  |  |  |     <title>Home - Child title</title> | 
					
						
							|  |  |  |   </head> | 
					
						
							|  |  |  |   <body> | 
					
						
							|  |  |  |     <h1>My home</h1> | 
					
						
							|  |  |  |     <div id="content"> | 
					
						
							|  |  |  |       <img src="/example.jpg" alt="image" /> | 
					
						
							|  |  |  |       <img src="/example2.jpg" alt="image" /> | 
					
						
							|  |  |  |       <img src="/example3.jpg" alt="image" /> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </body> | 
					
						
							|  |  |  | </html> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-17 19:03:06 +00:00
										 |  |  | NOTE: In the child templates everything outside the {extends} or {block} tag sections | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | is ignored. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The inheritance tree can be as big as you want (meaning you can extend a file that  | 
					
						
							|  |  |  | extends another one that extends another one and so on..), but be aware that all files  | 
					
						
							|  |  |  | have to be checked for modifications at runtime so the more inheritance the more overhead you add. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-17 19:03:06 +00:00
										 |  |  | Instead of defining the parent/child relationships with the {extends} tag in the child template you | 
					
						
							| 
									
										
										
										
											2009-12-27 15:06:49 +00:00
										 |  |  | can use the resource as follow: | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-12-06 12:25:19 +00:00
										 |  |  | $smarty->display('extends:parent.tpl|child.tpl|grandchild.tpl'); | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-12 22:13:21 +00:00
										 |  |  | Child {block} tags may optionally have a append or prepend attribute. In this case the parent block content  | 
					
						
							|  |  |  | is appended or prepended to the child block content. | 
					
						
							| 
									
										
										
										
											2009-11-12 21:56:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | {block name='title' append} My title {/block} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | PHP STREAMS: | 
					
						
							|  |  |  | ============ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (to be filled in) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | VARIBLE FILTERS: | 
					
						
							|  |  |  | ================ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (to be filled in) | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | PHP TEMPLATES | 
					
						
							|  |  |  | ============= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For those that prefer pure PHP over the {tag} based syntax, Smarty now offers | 
					
						
							|  |  |  | a PHP option for template syntax. PHP templates have several differences over | 
					
						
							|  |  |  | the tag-based templates: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | *) PHP templates are not compiled, they are included directly by the engine. | 
					
						
							|  |  |  | *) None of Smarty's security features are applied to PHP templates. | 
					
						
							|  |  |  | *) By default, PHP templates are disabled, set $smarty->allow_php_templates=true. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If you want to use a PHP template, just use the "php" resource type: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('php:foo.php'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | You can also mix PHP templates with {tag} templates: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {include file="php:foo.php"} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In PHP templates, assigned vars are available simply as: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // same as {$foo} | 
					
						
							|  |  |  | <?php echo $foo; ?> | 
					
						
							|  |  |  | <?=$foo?> // php short tags | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-11-02 21:14:10 +00:00
										 |  |  | At this point, smarty modifier/function plugins are not | 
					
						
							|  |  |  | conveniently accessible from PHP templates. A wrapper | 
					
						
							|  |  |  | function may become available in the future. | 
					
						
							| 
									
										
										
										
											2009-10-02 20:48:46 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | You can call PHP functions a usual: | 
					
						
							|  |  |  | <?php echo foo($bar); ?> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-22 16:59:03 +00:00
										 |  |  | Please look through it and send any questions/suggestions/etc to the forums. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | http://www.phpinsider.com/smarty-forum/viewtopic.php?t=14168 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Monte and Uwe |