| 
									
										
										
										
											2002-04-26 14:08:17 +00:00
										 |  |  |   <part id="smarty.for.programmers"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |    <title>Smarty For Programmers</title> | 
					
						
							| 
									
										
										
										
											2002-06-26 21:17:27 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	<chapter id="smarty.constants"> | 
					
						
							|  |  |  | 	 <title>Constants</title> | 
					
						
							|  |  |  | 	 <para></para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	 <sect1 id="constant.smarty.dir"> | 
					
						
							|  |  |  |       <title>SMARTY_DIR</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        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. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <example> | 
					
						
							|  |  |  |        <title>SMARTY_DIR</title> | 
					
						
							|  |  |  |        <programlisting> | 
					
						
							|  |  |  | // set path to Smarty directory | 
					
						
							|  |  |  | define("SMARTY_DIR","/usr/local/lib/php/Smarty/"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require_once(SMARTY_DIR."Smarty.class.php");</programlisting> | 
					
						
							|  |  |  |       </example> | 
					
						
							|  |  |  | 	 </sect1> | 
					
						
							|  |  |  | 	</chapter> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |     <chapter id="api.variables"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |      <title>Variables</title> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      <sect1 id="variable.template.dir"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$template_dir</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is the name of the default template directory. If you do | 
					
						
							|  |  |  |        not supply a resource type when including files, they will be | 
					
						
							|  |  |  |        found here. By default this is "./templates", meaning that it | 
					
						
							|  |  |  |        will look for the templates directory in the same directory as | 
					
						
							|  |  |  |        the executing php script. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	   <note> | 
					
						
							|  |  |  | 		   <title>Technical Note</title> | 
					
						
							|  |  |  | 		   <para> | 
					
						
							| 
									
										
										
										
											2002-06-26 21:17:27 +00:00
										 |  |  |     	   It is not recommended to put this directory under | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  |     	   the web server document root. | 
					
						
							|  |  |  |     	   </para> | 
					
						
							|  |  |  | 	  </note> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1>		 | 
					
						
							|  |  |  |      <sect1 id="variable.compile.dir"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$compile_dir</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is the name of the directory where compiled templates are | 
					
						
							|  |  |  |        located. By default this is "./templates_c", meaning that it | 
					
						
							|  |  |  |        will look for the compile directory in the same directory as | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |        the executing php script. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	 <note> | 
					
						
							|  |  |  | 	 <title>Technical Note</title> | 
					
						
							|  |  |  | 	 <para> | 
					
						
							|  |  |  |        This setting must be either a relative or | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |        absolute path. include_path is not used for writing files. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	 </note> | 
					
						
							|  |  |  | 	 <note> | 
					
						
							|  |  |  | 	 <title>Technical Note</title> | 
					
						
							|  |  |  | 	 <para> | 
					
						
							| 
									
										
										
										
											2002-06-26 21:17:27 +00:00
										 |  |  |        It is not recommended to put this directory under | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |        the web server document root. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	 </note> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.config.dir"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$config_dir</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is the directory used to store config files used in the | 
					
						
							|  |  |  |        templates. Default is "./configs", meaning that it will look | 
					
						
							|  |  |  |        for the configs directory in the same directory as the | 
					
						
							|  |  |  |        executing php script. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	 <note> | 
					
						
							|  |  |  | 	 <title>Technical Note</title> | 
					
						
							|  |  |  | 	 <para> | 
					
						
							| 
									
										
										
										
											2002-06-26 21:17:27 +00:00
										 |  |  |        It is not recommended to put this directory under | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |        the web server document root. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	 </note> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.plugins.dir"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$plugins_dir</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2002-06-26 21:17:27 +00:00
										 |  |  | 	   This is the directories where Smarty will look for the plugins that it | 
					
						
							|  |  |  | 	   needs. Default is "plugins" under the SMARTY_DIR. If you supply a | 
					
						
							|  |  |  | 	   relative path, Smarty will first look under the SMARTY_DIR, then | 
					
						
							|  |  |  | 	   relative to the cwd (current working directory), then relative to each | 
					
						
							|  |  |  | 	   entry in your PHP include path. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-06-26 21:17:27 +00:00
										 |  |  | 	  <note> | 
					
						
							|  |  |  | 	  <title>Technical Note</title> | 
					
						
							|  |  |  | 	  <para> | 
					
						
							|  |  |  | 	  For best performance, do not setup your plugins_dir to have to use the | 
					
						
							|  |  |  | 	  PHP include path. Use an absolute pathname, or a path relative to | 
					
						
							|  |  |  | 	  SMARTY_DIR or the cwd. | 
					
						
							|  |  |  | 	  </para> | 
					
						
							|  |  |  | 	  </note> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.debugging"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$debugging</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This enables the <link | 
					
						
							|  |  |  |         linkend="chapter.debugging.console">debugging console</link>. | 
					
						
							|  |  |  |        The console is a javascript window that informs you of the | 
					
						
							|  |  |  |        included templates and assigned variables for the current | 
					
						
							|  |  |  |        template page. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.debug.tpl"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$debug_tpl</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2002-06-25 23:02:58 +00:00
										 |  |  | 	   This is the name of the template file used for the debugging console. By | 
					
						
							|  |  |  | 	   default, it is named debug.tpl and is located in the <link | 
					
						
							|  |  |  | 	   linkend="constant.smarty.dir">SMARTY_DIR</link>. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.debugging.ctrl"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$debugging_ctrl</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This allows alternate ways to enable debugging. NONE means no | 
					
						
							|  |  |  |        alternate methods are allowed. URL means when the keyword | 
					
						
							|  |  |  |        SMARTY_DEBUG is found in the QUERY_STRING, debugging is enabled | 
					
						
							|  |  |  |        for that invocation of the script. If $debugging is true, this | 
					
						
							|  |  |  |        value is ignored. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.global.assign"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$global_assign</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is a list of variables that are always implicitly assigned | 
					
						
							|  |  |  |        to the template engine. This is handy for making global | 
					
						
							|  |  |  |        variables or server variables available to all templates | 
					
						
							|  |  |  |        without having to manually assign them. Each element in the | 
					
						
							|  |  |  |        $global_assign should be either a name of the global variable, | 
					
						
							|  |  |  |        or a key/value pair, where the key is the name of the global | 
					
						
							|  |  |  |        array and the value is the array of variables to be assigned | 
					
						
							|  |  |  |        from that global array. $SCRIPT_NAME is globally assigned by | 
					
						
							|  |  |  |        default from $HTTP_SERVER_VARS. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	 <note> | 
					
						
							|  |  |  | 	 <title>Technical Note</title> | 
					
						
							|  |  |  | 	 <para> | 
					
						
							|  |  |  |        Server variables can be accessed through the | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |        $smarty variable, such as {$smarty.server.SCRIPT_NAME}. See the | 
					
						
							|  |  |  |        section on the | 
					
						
							| 
									
										
										
										
											2002-03-01 20:50:49 +00:00
										 |  |  |        <link linkend="language.variables.smarty">$smarty</link> variable. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	 </note> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.undefined"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$undefined</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This sets the value of $undefined for Smarty, default is null. | 
					
						
							|  |  |  |        Currently this is only used to set undefined variables in | 
					
						
							|  |  |  |        $global_assign to a default value. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |      <sect1 id="variable.autoload.filters"> | 
					
						
							|  |  |  |       <title>$autoload_filters</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        If there are some filters that you wish to load on every template | 
					
						
							|  |  |  |        invocation, you can specify them using this variable and Smarty will | 
					
						
							|  |  |  |        automatically load them for you. The variable is an associative array | 
					
						
							|  |  |  |        where keys are filter types and values are arrays of the filter | 
					
						
							|  |  |  |        names. For example: | 
					
						
							|  |  |  |        <informalexample> | 
					
						
							|  |  |  |         <programlisting> | 
					
						
							|  |  |  | $smarty->autoload_filters = array('pre' => array('trim', 'stamp'), | 
					
						
							|  |  |  |                                   'output' => array('convert'));  | 
					
						
							|  |  |  |         </programlisting> | 
					
						
							|  |  |  |        </informalexample>  | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |      </sect1> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      <sect1 id="variable.compile.check"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$compile_check</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2002-12-10 17:43:11 +00:00
										 |  |  | 	   Upon each invocation of the PHP application, Smarty tests to see if the | 
					
						
							|  |  |  | 	   current template has changed (different time stamp) since the last time | 
					
						
							|  |  |  | 	   it was compiled. If it has changed, it recompiles that template. If the | 
					
						
							|  |  |  | 	   template has not been compiled, it will compile regardless of this | 
					
						
							|  |  |  | 	   setting. By default this variable is set to true. Once an application is | 
					
						
							|  |  |  | 	   put into production (templates won't be changing), the compile_check | 
					
						
							|  |  |  | 	   step is no longer needed. Be sure to set $compile_check to "false" for | 
					
						
							|  |  |  | 	   maximal performance. Note that if you change this to "false" and a | 
					
						
							|  |  |  | 	   template file is changed, you will *not* see the change since the | 
					
						
							|  |  |  | 	   template will not get recompiled. If caching is enabled and | 
					
						
							|  |  |  | 	   compile_check is enabled, then the cache files will get regenerated if | 
					
						
							|  |  |  | 	   an involved template file or config file was updated. See <link | 
					
						
							|  |  |  | 	   linkend="variable.force.compile">$force_compile</link> or <link | 
					
						
							|  |  |  | 	   linkend="api.clear.compiled.tpl">clear_compiled_tpl</link>. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.force.compile"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$force_compile</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This forces Smarty to (re)compile templates on every | 
					
						
							|  |  |  |        invocation. This setting overrides $compile_check. By default | 
					
						
							|  |  |  |        this is disabled. This is handy for development and debugging. | 
					
						
							|  |  |  |        It should never be used in a production environment. If caching | 
					
						
							|  |  |  |        is enabled, the cache file(s) will be regenerated every time. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.caching"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$caching</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2002-04-15 17:28:50 +00:00
										 |  |  | 	   This tells Smarty whether or not to cache the output of the templates. | 
					
						
							|  |  |  | 	   By default this is set to 0, or disabled. If your templates generate | 
					
						
							|  |  |  | 	   redundant redundant content, it is advisable to turn on caching. This | 
					
						
							|  |  |  | 	   will result in significant performance gains. You can also have multiple | 
					
						
							|  |  |  | 	   caches for the same template. A value of 1 or 2 enables caching. 1 tells | 
					
						
							|  |  |  | 	   Smarty to use the current $cache_lifetime variable to determine if the | 
					
						
							|  |  |  | 	   cache has expired. A value of 2 tells Smarty to use the cache_lifetime | 
					
						
							|  |  |  | 	   value at the time the cache was generated. This way you can set the | 
					
						
							|  |  |  | 	   cache_lifetime just before fetching the template to have granular | 
					
						
							|  |  |  | 	   control over when that particular cache expires. See also <link | 
					
						
							|  |  |  | 	   linkend="api.is.cached">is_cached</link>. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 	   If $compile_check is enabled, the cached content will be regenerated if | 
					
						
							|  |  |  | 	   any of the templates or config files that are part of this cache are | 
					
						
							|  |  |  | 	   changed. If $force_compile is enabled, the cached content will always be | 
					
						
							|  |  |  | 	   regenerated. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.cache.dir"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$cache_dir</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is the name of the directory where template caches are | 
					
						
							|  |  |  |        stored. By default this is "./cache", meaning that it will look | 
					
						
							|  |  |  |        for the cache directory in the same directory as the executing | 
					
						
							|  |  |  |        php script. You can also use your own custom cache handler | 
					
						
							|  |  |  |        function to control cache files, which will ignore this | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |        setting. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	  <note> | 
					
						
							|  |  |  | 	  <title>Technical Note</title> | 
					
						
							|  |  |  | 	  <para> | 
					
						
							|  |  |  |        This setting must be either a relative or | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |        absolute path. include_path is not used for writing files. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  | 	  </note> | 
					
						
							|  |  |  | 	  <note> | 
					
						
							|  |  |  | 		  <title>Technical Note</title> | 
					
						
							|  |  |  | 		  <para> | 
					
						
							| 
									
										
										
										
											2002-06-26 21:17:27 +00:00
										 |  |  |     	   It is not recommended to put this directory under | 
					
						
							| 
									
										
										
										
											2002-02-27 19:47:13 +00:00
										 |  |  |     	   the web server document root. | 
					
						
							|  |  |  |     	  </para> | 
					
						
							|  |  |  | 	  </note> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.cache.lifetime"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$cache_lifetime</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2002-04-15 17:28:50 +00:00
										 |  |  | 	   This is the length of time in seconds that a template cache is valid. | 
					
						
							|  |  |  | 	   Once this time has expired, the cache will be regenerated. $caching must | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  | 	   be set to "true" for $cache_lifetime to have any purpose. A value of -1 | 
					
						
							|  |  |  | 	   will force the cache to never expire. A value of 0 will cause the cache | 
					
						
							|  |  |  | 	   to always regenerate (good for testing only, to disable caching a more | 
					
						
							|  |  |  | 	   efficient method is to set <link | 
					
						
							|  |  |  | 	   linkend="variable.caching">$caching</link> = false.) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  | 	  <para> | 
					
						
							|  |  |  | 	   If <link linkend="variable.force.compile">$force_compile</link> is | 
					
						
							|  |  |  | 	   enabled, the cache files will be regenerated every time, effectively | 
					
						
							|  |  |  | 	   disabling caching. You can clear all the cache files with the <link | 
					
						
							|  |  |  | 	   linkend="api.clear.all.cache">clear_all_cache()</link> function, or | 
					
						
							|  |  |  | 	   individual cache files (or groups) with the <link | 
					
						
							|  |  |  | 	   linkend="api.clear.cache">clear_cache()</link> function. | 
					
						
							|  |  |  | 	  </para> | 
					
						
							|  |  |  | 	  <note> | 
					
						
							|  |  |  | 	  <title>Technical Note</title> | 
					
						
							|  |  |  | 	  <para> | 
					
						
							|  |  |  | 	  If you want to give certain templates their own cache lifetime, you could | 
					
						
							|  |  |  | 	  do this by setting <link linkend="variable.caching">$caching</link> = 2, | 
					
						
							|  |  |  | 	  then set $cache_lifetime to a unique value just before calling display() | 
					
						
							|  |  |  | 	  or fetch(). | 
					
						
							|  |  |  | 	  </para> | 
					
						
							|  |  |  | 	  </note> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.cache.handler.func"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$cache_handler_func</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        You can supply a custom function to handle cache files instead | 
					
						
							|  |  |  |        of using the built-in method using the $cache_dir. See the | 
					
						
							|  |  |  |        custom cache handler function section for details. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.cache.modified.check"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$cache_modified_check</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        If set to true, Smarty will respect the If-Modified-Since | 
					
						
							|  |  |  |        header sent from the client. If the cached file timestamp has | 
					
						
							|  |  |  |        not changed since the last visit, then a "304 Not Modified" | 
					
						
							|  |  |  |        header will be sent instead of the content. This works only on | 
					
						
							| 
									
										
										
										
											2002-02-26 22:59:20 +00:00
										 |  |  |        cached content without <command>insert</command> tags. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							| 
									
										
										
										
											2002-12-10 17:43:11 +00:00
										 |  |  |      <sect1 id="variable.config.overwrite"> | 
					
						
							|  |  |  |       <title>$config_overwrite</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        If set to true, variables read in from config files will overwrite each | 
					
						
							|  |  |  | 	   other. Otherwise, the variables will be pushed onto an array. This is | 
					
						
							|  |  |  | 	   helpful if you want to store arrays of data in config files, just list | 
					
						
							|  |  |  | 	   each element multiple times. true by default. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.config.booleanize"> | 
					
						
							|  |  |  |       <title>$config_booleanize</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	   If set to true, config file values of on/true/yes and off/false/no get | 
					
						
							|  |  |  | 	   converted to boolean values automatically. This way you can use the | 
					
						
							|  |  |  | 	   values in the template like so: {if #foobar#} ... {/if}. If foobar was | 
					
						
							|  |  |  | 	   on, true or yes, the {if} statement will execute. true by default. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.config.read.hidden"> | 
					
						
							|  |  |  |       <title>$config_read_hidden</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	   If set to true, hidden sections (section names beginning with a period) | 
					
						
							|  |  |  | 	   in config files can be read from templates. Typically you would leave | 
					
						
							|  |  |  | 	   this false, that way you can store sensitive data in the config files | 
					
						
							|  |  |  | 	   such as database parameters and not worry about the template loading | 
					
						
							|  |  |  | 	   them. false by default. | 
					
						
							|  |  |  | 	   </para> | 
					
						
							|  |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.config.fix.newlines"> | 
					
						
							|  |  |  |       <title>$config_fix_newlines</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	   If set to true, mac and dos newlines (\r and \r\n) in config files are | 
					
						
							|  |  |  | 	   converted to \n when they are parsed. true by default. | 
					
						
							|  |  |  | 	   </para> | 
					
						
							|  |  |  |      </sect1> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      <sect1 id="variable.default.template.handler.func"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$default_template_handler_func</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This function is called when a template cannot be obtained from | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |        its resource. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.php.handling"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$php_handling</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This tells Smarty how to handle PHP code embedded in the | 
					
						
							| 
									
										
										
										
											2003-03-31 00:29:10 +00:00
										 |  |  |        templates. There are four possible settings, default being | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |        SMARTY_PHP_PASSTHRU. Note that this does NOT affect php code | 
					
						
							| 
									
										
										
										
											2002-03-01 20:50:49 +00:00
										 |  |  |        within <link linkend="language.function.php">{php}{/php}</link> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |        tags in the template. | 
					
						
							|  |  |  |       </para>     | 
					
						
							|  |  |  |       <itemizedlist> | 
					
						
							|  |  |  |        <listitem><para>SMARTY_PHP_PASSTHRU - Smarty echos tags as-is.</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>SMARTY_PHP_QUOTE - Smarty quotes the tags as | 
					
						
							|  |  |  |          html entities.</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>SMARTY_PHP_REMOVE - Smarty removes the tags from | 
					
						
							|  |  |  |          the templates.</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>SMARTY_PHP_ALLOW - Smarty will execute the tags | 
					
						
							|  |  |  |          as PHP code.</para></listitem> | 
					
						
							|  |  |  |       </itemizedlist> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        NOTE: Embedding PHP code into templates is highly discouraged. | 
					
						
							| 
									
										
										
										
											2002-03-01 20:50:49 +00:00
										 |  |  |        Use <link linkend="language.custom.functions">custom functions</link> or | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |        <link linkend="language.modifiers">modifiers</link> instead. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.security"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$security</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        $security true/false, default is false. Security is good for | 
					
						
							|  |  |  |        situations when you have untrusted parties editing the templates | 
					
						
							|  |  |  |        (via ftp for example) and you want to reduce the risk of system | 
					
						
							|  |  |  |        security compromises through the template language. Turning on | 
					
						
							|  |  |  |        security enforces the following rules to the template language, | 
					
						
							|  |  |  |        unless specifially overridden with $security_settings: | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <itemizedlist> | 
					
						
							|  |  |  |        <listitem><para>If $php_handling is set to SMARTY_PHP_ALLOW, this is | 
					
						
							|  |  |  |          implicitly changed to SMARTY_PHP_PASSTHRU</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>PHP functions are not allowed in IF statements, | 
					
						
							|  |  |  |          except those specified in the $security_settings</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>templates can only be included from directories | 
					
						
							|  |  |  |          listed in the $secure_dir array</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>local files can only be fetched from directories | 
					
						
							|  |  |  |          listed in the $secure_dir array using {fetch}</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>{php}{/php} tags are not allowed</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>PHP functions are not allowed as modifiers, except | 
					
						
							|  |  |  |          those specified in the $security_settings</para></listitem> | 
					
						
							|  |  |  |       </itemizedlist> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.secure.dir"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$secure_dir</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is an array of all local directories that are considered | 
					
						
							|  |  |  |        secure. {include} and {fetch} use this when security is enabled. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.security.settings"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$security_settings</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        These are used to override or specify the security settings when | 
					
						
							|  |  |  |        security is enabled. These are the possible settings: | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <itemizedlist> | 
					
						
							|  |  |  |        <listitem><para>PHP_HANDLING - true/false. If set to true, the | 
					
						
							|  |  |  |          $php_handling setting is not checked for security.</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>IF_FUNCS - This is an array of the names of permitted | 
					
						
							|  |  |  |          PHP functions in IF statements.</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>INCLUDE_ANY - true/false. If set to true, any | 
					
						
							|  |  |  |          template can be included from the file system, regardless of the | 
					
						
							|  |  |  |          $secure_dir list.</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>PHP_TAGS - true/false. If set to true, {php}{/php} | 
					
						
							|  |  |  |          tags are permitted in the templates.</para></listitem> | 
					
						
							|  |  |  |        <listitem><para>MODIFIER_FUNCS - This is an array of the names of permitted | 
					
						
							|  |  |  |          PHP functions used as variable modifiers.</para></listitem> | 
					
						
							|  |  |  |       </itemizedlist> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.trusted.dir"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$trusted_dir</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	   $trusted_dir is only for use when $security is enabled. This is an array | 
					
						
							|  |  |  | 	   of all directories that are considered trusted. Trusted directories are | 
					
						
							|  |  |  | 	   where you keep php scripts that are executed directly from the templates | 
					
						
							| 
									
										
										
										
											2002-03-01 20:50:49 +00:00
										 |  |  | 	   with <link linkend="language.function.include.php">{include_php}</link>. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.left.delimiter"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$left_delimiter</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is the left delimiter used by the template language. | 
					
						
							|  |  |  |        Default is "{".			 | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.right.delimiter"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$right_delimiter</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is the right delimiter used by the template language. | 
					
						
							|  |  |  |        Default is "}".			 | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.compiler.class"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$compiler_class</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        Specifies the name of the compiler class that Smarty will use | 
					
						
							|  |  |  |        to compile the templates. The default is 'Smarty_Compiler'. For | 
					
						
							|  |  |  |        advanced users only. | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.request.vars.order"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$request_vars_order</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        The order in which request variables are registered, similar to | 
					
						
							|  |  |  |        variables_order in php.ini | 
					
						
							|  |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.compile.id"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>$compile_id</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2002-06-14 20:58:20 +00:00
										 |  |  | 	   Persistant compile identifier. As an alternative to passing the same | 
					
						
							|  |  |  | 	   compile_id to each and every function call, you can set this compile_id | 
					
						
							|  |  |  | 	   and it will be used implicitly thereafter. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |      </sect1> | 
					
						
							|  |  |  |      <sect1 id="variable.use.sub.dirs"> | 
					
						
							|  |  |  |       <title>$use_sub_dirs</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	  Set this to false if your PHP environment does not allow the creation of | 
					
						
							|  |  |  | 	  sub directories by Smarty. Sub directories are more efficient, so use them | 
					
						
							|  |  |  | 	  if you can. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      </sect1> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  |      <sect1 id="variable.default.modifiers"> | 
					
						
							|  |  |  |       <title>$default_modifiers</title> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	  This is an array of modifiers to implicitly apply to every variable in a | 
					
						
							|  |  |  | 	  template. For example, to HTML-escape every variable by default, use | 
					
						
							|  |  |  | 	  array('escape:"htmlall"'); To make a variable exempt from default | 
					
						
							|  |  |  | 	  modifiers, pass the special "nodefaults" modifier to it, such as | 
					
						
							|  |  |  | 	  {$var|nodefaults}. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |      </sect1> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |     </chapter> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |    <chapter id="api.functions"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |      <title>Methods</title> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |         <sect1 id="api.append"> | 
					
						
							|  |  |  |          <title>append</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>append</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>append</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>varname</parameter></paramdef> | 
					
						
							|  |  |  |            <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>append</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>varname</parameter></paramdef> | 
					
						
							|  |  |  |            <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |            <paramdef>boolean <parameter>merge</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							| 
									
										
										
										
											2002-12-24 16:09:12 +00:00
										 |  |  | 		  This is used to append an element to an assigned array. If you append | 
					
						
							|  |  |  | 		  to a string value, it is converted to an array value and then | 
					
						
							|  |  |  | 		  appended to. You can explicitly pass name/value pairs, or associative | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | 		  arrays containing the name/value pairs. If you pass the optional third | 
					
						
							|  |  |  | 		  parameter of true, the value will be merged with the current array | 
					
						
							|  |  |  | 		  instead of appended. | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |          </para> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | 		 <note> | 
					
						
							|  |  |  | 		 <title>Technical Note</title> | 
					
						
							|  |  |  | 		 <para> | 
					
						
							|  |  |  | 		 The merge parameter respects array keys, so if you merge two | 
					
						
							|  |  |  | 		 numerically indexed arrays, they may overwrite each other or result in | 
					
						
							|  |  |  | 		 non-sequential keys. This is unlike the array_merge() function of PHP | 
					
						
							|  |  |  | 		 which wipes out numerical keys and renumbers them. | 
					
						
							|  |  |  | 		 </para> | 
					
						
							|  |  |  | 		 </note> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |          <example> | 
					
						
							|  |  |  |           <title>append</title> | 
					
						
							|  |  |  |           <programlisting> | 
					
						
							|  |  |  | // passing name/value pairs | 
					
						
							|  |  |  | $smarty->append("Name","Fred"); | 
					
						
							|  |  |  | $smarty->append("Address",$address); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // passing an associative array | 
					
						
							|  |  |  | $smarty->append(array("city" => "Lincoln","state" => "Nebraska"));</programlisting> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  |      <sect1 id="api.append.by.ref"> | 
					
						
							|  |  |  |       <title>append_by_ref</title> | 
					
						
							|  |  |  |       <funcsynopsis> | 
					
						
							|  |  |  |        <funcprototype> | 
					
						
							| 
									
										
										
										
											2002-08-15 15:21:59 +00:00
										 |  |  |         <funcdef>void <function>append_by_ref</function></funcdef> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  |         <paramdef>string <parameter>varname</parameter></paramdef> | 
					
						
							|  |  |  |         <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |        </funcprototype> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  |        <funcprototype> | 
					
						
							|  |  |  |         <funcdef>void <function>append_by_ref</function></funcdef> | 
					
						
							|  |  |  |         <paramdef>string <parameter>varname</parameter></paramdef> | 
					
						
							|  |  |  |         <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |         <paramdef>boolean <parameter>merge</parameter></paramdef> | 
					
						
							|  |  |  |        </funcprototype> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  |       </funcsynopsis> | 
					
						
							|  |  |  |       <para> | 
					
						
							| 
									
										
										
										
											2003-03-12 00:14:32 +00:00
										 |  |  | 	   This is used to append values to the templates by reference. | 
					
						
							|  |  |  | 	   If you append a variable by reference then change its | 
					
						
							|  |  |  |        value, the appended value sees the change as well. For objects,  | 
					
						
							|  |  |  |        append_by_ref() also avoids an in-memory copy of the appended object. | 
					
						
							|  |  |  |        See the PHP manual on variable referencing for an in-depth | 
					
						
							|  |  |  | 	   explanation. If you pass the optional third parameter of true, | 
					
						
							|  |  |  |        the value will be merged with the current array instead of appended. | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  |       </para> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | 	  <note> | 
					
						
							|  |  |  | 	  <title>Technical Note</title> | 
					
						
							|  |  |  | 	  <para> | 
					
						
							|  |  |  | 	  The merge parameter respects array keys, so if you merge two | 
					
						
							|  |  |  | 	  numerically indexed arrays, they may overwrite each other or result in | 
					
						
							|  |  |  | 	  non-sequential keys. This is unlike the array_merge() function of PHP | 
					
						
							|  |  |  | 	  which wipes out numerical keys and renumbers them. | 
					
						
							|  |  |  | 	  </para> | 
					
						
							|  |  |  | 	  </note> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  |       <example> | 
					
						
							|  |  |  |        <title>append_by_ref</title> | 
					
						
							|  |  |  |        <programlisting> | 
					
						
							|  |  |  | // appending name/value pairs | 
					
						
							|  |  |  | $smarty->append_by_ref("Name",$myname); | 
					
						
							|  |  |  | $smarty->append_by_ref("Address",$address);</programlisting> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |      <sect1 id="api.assign"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <title>assign</title> | 
					
						
							|  |  |  |       <funcsynopsis> | 
					
						
							|  |  |  |        <funcprototype> | 
					
						
							|  |  |  |         <funcdef>void <function>assign</function></funcdef> | 
					
						
							|  |  |  |         <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |        </funcprototype> | 
					
						
							|  |  |  |        <funcprototype> | 
					
						
							|  |  |  |         <funcdef>void <function>assign</function></funcdef> | 
					
						
							|  |  |  |         <paramdef>string <parameter>varname</parameter></paramdef> | 
					
						
							|  |  |  |         <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |        </funcprototype> | 
					
						
							|  |  |  |       </funcsynopsis> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        This is used to assign values to the templates. You can | 
					
						
							|  |  |  |        explicitly pass name/value pairs, or associative arrays | 
					
						
							|  |  |  |        containing the name/value pairs. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |       <example> | 
					
						
							|  |  |  |        <title>assign</title> | 
					
						
							|  |  |  |        <programlisting> | 
					
						
							|  |  |  | // passing name/value pairs | 
					
						
							|  |  |  | $smarty->assign("Name","Fred"); | 
					
						
							|  |  |  | $smarty->assign("Address",$address); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // passing an associative array | 
					
						
							|  |  |  | $smarty->assign(array("city" => "Lincoln","state" => "Nebraska"));</programlisting> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  |      <sect1 id="api.assign.by.ref"> | 
					
						
							|  |  |  |       <title>assign_by_ref</title> | 
					
						
							|  |  |  |       <funcsynopsis> | 
					
						
							|  |  |  |        <funcprototype> | 
					
						
							| 
									
										
										
										
											2002-08-15 15:21:59 +00:00
										 |  |  |         <funcdef>void <function>assign_by_ref</function></funcdef> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  |         <paramdef>string <parameter>varname</parameter></paramdef> | 
					
						
							|  |  |  |         <paramdef>mixed <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  |        </funcprototype> | 
					
						
							|  |  |  |       </funcsynopsis> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  | 	   This is used to assign values to the templates by reference instead of | 
					
						
							|  |  |  | 	   making a copy. See the PHP manual on variable referencing for an explanation. | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  | 	  <note> | 
					
						
							|  |  |  | 	  <title>Technical Note</title> | 
					
						
							|  |  |  | 	  <para> | 
					
						
							| 
									
										
										
										
											2003-03-12 00:14:32 +00:00
										 |  |  | 	   This is used to assign values to the templates by reference. | 
					
						
							|  |  |  | 	   If you assign a variable by reference then change its | 
					
						
							|  |  |  |        value, the assigned value sees the change as well. For objects,  | 
					
						
							|  |  |  |        assign_by_ref() also avoids an in-memory copy of the assigned object. | 
					
						
							|  |  |  |        See the PHP manual on variable referencing for an in-depth | 
					
						
							|  |  |  | 	   explanation. | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  | 	  </para> | 
					
						
							|  |  |  | 	  </note> | 
					
						
							|  |  |  |       <example> | 
					
						
							|  |  |  |        <title>assign_by_ref</title> | 
					
						
							|  |  |  |        <programlisting> | 
					
						
							|  |  |  | // passing name/value pairs | 
					
						
							|  |  |  | $smarty->assign_by_ref("Name",$myname); | 
					
						
							|  |  |  | $smarty->assign_by_ref("Address",$address);</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.clear.all.assign"> | 
					
						
							|  |  |  | 			<title>clear_all_assign</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>clear_all_assign</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef><parameter></parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 				This clears the values of all assigned variables. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>clear_all_assign</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // clear all assigned variables | 
					
						
							|  |  |  | $smarty->clear_all_assign();</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.clear.all.cache"> | 
					
						
							|  |  |  | 			<title>clear_all_cache</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>clear_all_cache</function></funcdef> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  | 				<paramdef>int <parameter>expire time</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  | 				This clears the entire template cache. As an optional | 
					
						
							|  |  |  | 				parameter, you can supply a minimum age in seconds the cache | 
					
						
							|  |  |  | 				files must be before they will get cleared. | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>clear_all_cache</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // clear the entire cache | 
					
						
							|  |  |  | $smarty->clear_all_cache();</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.clear.assign"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<title>clear_assign</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>clear_assign</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>var</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 				This clears the value of an assigned variable. This | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |                 can be a single value, or an array of values. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>clear_assign</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // clear a single variable | 
					
						
							|  |  |  | $smarty->clear_assign("Name"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear multiple variables | 
					
						
							|  |  |  | $smarty->clear_assign(array("Name","Address","Zip"));</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.clear.cache"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<title>clear_cache</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>clear_cache</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>template</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-09-23 17:05:21 +00:00
										 |  |  | 				<paramdef>string <parameter><optional>cache id</optional></parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>compile id</optional></parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>int <parameter><optional>expire time</optional></parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-06-14 20:58:20 +00:00
										 |  |  | 				This clears the cache for a specific template. If you have | 
					
						
							|  |  |  | 				multiple caches for this template, you can clear a specific | 
					
						
							|  |  |  | 				cache by supplying the cache id as the second parameter. You | 
					
						
							| 
									
										
										
										
											2002-09-10 18:48:00 +00:00
										 |  |  | 				can also pass a compile id as a third parameter. You can "group" | 
					
						
							| 
									
										
										
										
											2002-06-14 20:58:20 +00:00
										 |  |  | 				templates together so they can be removed as a group. See the | 
					
						
							| 
									
										
										
										
											2002-08-07 14:57:34 +00:00
										 |  |  | 				<link linkend="caching">caching section</link> for more | 
					
						
							|  |  |  | 				information. As an optional fourth parameter, you can supply a | 
					
						
							|  |  |  | 				minimum age in seconds the cache file must be before it will | 
					
						
							|  |  |  | 				get cleared. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>clear_cache</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // clear the cache for a template | 
					
						
							|  |  |  | $smarty->clear_cache("index.tpl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear the cache for a particular cache id in an multiple-cache template | 
					
						
							|  |  |  | $smarty->clear_cache("index.tpl","CACHEID");</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.clear.compiled.tpl"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<title>clear_compiled_tpl</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>clear_compiled_tpl</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>tpl_file</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 			This clears the compiled version of the specified template | 
					
						
							|  |  |  | 			resource, or all compiled template files if one is not specified. | 
					
						
							|  |  |  | 			This function is for advanced use only, not normally needed. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>clear_compiled_tpl</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // clear a specific template resource | 
					
						
							|  |  |  | $smarty->clear_compiled_tpl("index.tpl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear entire compile directory | 
					
						
							|  |  |  | $smarty->clear_compiled_tpl();</programlisting> | 
					
						
							| 
									
										
										
										
											2002-12-10 17:43:11 +00:00
										 |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.clear.config"> | 
					
						
							|  |  |  | 			<title>clear_config</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>clear_config</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>var</optional></parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 			This clears all assigned config variables. If a variable name is | 
					
						
							|  |  |  | 			supplied, only that variable is cleared. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>clear_config</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // clear all assigned config variables. | 
					
						
							|  |  |  | $smarty->clear_config(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear one variable | 
					
						
							|  |  |  | $smarty->clear_config('foobar');</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.config.load"> | 
					
						
							|  |  |  | 			<title>config_load</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>config_load</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>file</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>section</optional></parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 			This loads config file data and assigns it to the template. This | 
					
						
							|  |  |  | 			works identical to the template <link | 
					
						
							|  |  |  | 			linkend="language.function.config.load">config_load</link> | 
					
						
							|  |  |  | 			function. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | 		  <note> | 
					
						
							|  |  |  | 		  <title>Technical Note</title> | 
					
						
							|  |  |  |     	  <para> | 
					
						
							|  |  |  | 		   As of Smarty 2.4.0, assigned template variables are kept across | 
					
						
							|  |  |  | 		   invocations of fetch() and display(). Config vars loaded from | 
					
						
							|  |  |  | 		   config_load() are always global scope. Config files are also | 
					
						
							|  |  |  | 		   compiled for faster execution, and respect the <link | 
					
						
							|  |  |  | 		   linkend="variable.force.compile">force_compile</link> and <link | 
					
						
							|  |  |  | 		   linkend="variable.compile.check">compile_check</link> settings. | 
					
						
							|  |  |  |     	  </para> | 
					
						
							|  |  |  | 		  </note> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>config_load</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // load config variables and assign them | 
					
						
							|  |  |  | $smarty->config_load('my.conf'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // load a section | 
					
						
							|  |  |  | $smarty->config_load('my.conf','foobar');</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.display"> | 
					
						
							|  |  |  | 			<title>display</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<funcdef>void <function>display</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>template</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>cache_id</optional></parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>compile_id</optional></parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 This displays the template. Supply a valid <link | 
					
						
							|  |  |  |                 linkend="template.resources">template resource</link> | 
					
						
							|  |  |  |                 type and path. As an optional second parameter, you can pass a | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |                 cache id. See the <link linkend="caching">caching | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 section</link> for more information. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 				As an optional third parameter, you can pass a compile id. This | 
					
						
							|  |  |  | 				is in the event that you want to compile different versions of | 
					
						
							|  |  |  | 				the same template, such as having separate templates compiled | 
					
						
							| 
									
										
										
										
											2002-06-14 20:58:20 +00:00
										 |  |  | 				for different languages. Another use for compile_id is when you | 
					
						
							|  |  |  | 				use more than one $template_dir but only one $compile_dir. Set | 
					
						
							|  |  |  | 				a separate compile_id for each $template_dir, otherwise | 
					
						
							|  |  |  | 				templates of the same name will overwrite each other. You can | 
					
						
							|  |  |  | 				also set the <link | 
					
						
							|  |  |  | 				linkend="variable.compile.id">$compile_id</link> variable once | 
					
						
							|  |  |  | 				instead of passing this to each call to display(). | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <title>display</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | include("Smarty.class.php"); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // only do db calls if cache doesn't exist | 
					
						
							|  |  |  | if(!$smarty->is_cached("index.tpl")) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // dummy up some data | 
					
						
							|  |  |  |     $address = "245 N 50th"; | 
					
						
							|  |  |  |     $db_data = array( | 
					
						
							|  |  |  | 	    "City" => "Lincoln", | 
					
						
							|  |  |  | 	    "State" => "Nebraska", | 
					
						
							|  |  |  | 	    "Zip" = > "68502" | 
					
						
							|  |  |  | 	    ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $smarty->assign("Name","Fred"); | 
					
						
							|  |  |  |     $smarty->assign("Address",$address); | 
					
						
							|  |  |  |     $smarty->assign($db_data); | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // display the output | 
					
						
							|  |  |  | $smarty->display("index.tpl");</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<para> | 
					
						
							|  |  |  | 			Use the syntax for <link | 
					
						
							|  |  |  | 			linkend="template.resources">template resources</link> to | 
					
						
							|  |  |  | 			display files outside of the $template_dir directory. | 
					
						
							|  |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <title>function display template resource examples</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // absolute filepath | 
					
						
							|  |  |  | $smarty->display("/usr/local/include/templates/header.tpl"); | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // absolute filepath (same thing) | 
					
						
							|  |  |  | $smarty->display("file:/usr/local/include/templates/header.tpl"); | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // windows absolute filepath (MUST use "file:" prefix) | 
					
						
							|  |  |  | $smarty->display("file:C:/www/pub/templates/header.tpl"); | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // include from template resource named "db" | 
					
						
							|  |  |  | $smarty->display("db:header.tpl");</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.fetch"> | 
					
						
							|  |  |  | 			<title>fetch</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>string <function>fetch</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>template</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>cache_id</optional></parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>compile_id</optional></parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  |                 This returns the template output instead of displaying it. | 
					
						
							|  |  |  |                 Supply a valid <link | 
					
						
							|  |  |  |                 linkend="template.resources">template resource</link> | 
					
						
							|  |  |  |                 type and path. As an optional second parameter, you can pass a | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |                 cache id. See the <link linkend="caching">caching | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 section</link> for more information. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 				As an optional third parameter, you can pass a compile id. This | 
					
						
							|  |  |  | 				is in the event that you want to compile different versions of | 
					
						
							|  |  |  | 				the same template, such as having separate templates compiled | 
					
						
							| 
									
										
										
										
											2002-06-14 20:58:20 +00:00
										 |  |  | 				for different languages. Another use for compile_id is when you | 
					
						
							|  |  |  | 				use more than one $template_dir but only one $compile_dir. Set | 
					
						
							|  |  |  | 				a separate compile_id for each $template_dir, otherwise | 
					
						
							|  |  |  | 				templates of the same name will overwrite each other. You can | 
					
						
							|  |  |  | 				also set the <link | 
					
						
							|  |  |  | 				linkend="variable.compile.id">$compile_id</link> variable once | 
					
						
							|  |  |  | 				instead of passing this to each call to fetch(). | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>fetch</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | include("Smarty.class.php"); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // only do db calls if cache doesn't exist | 
					
						
							|  |  |  | if(!$smarty->is_cached("index.tpl")) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // dummy up some data | 
					
						
							|  |  |  |     $address = "245 N 50th"; | 
					
						
							|  |  |  |     $db_data = array( | 
					
						
							|  |  |  | 	    "City" => "Lincoln", | 
					
						
							|  |  |  | 	    "State" => "Nebraska", | 
					
						
							|  |  |  | 	    "Zip" = > "68502" | 
					
						
							|  |  |  | 	    ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $smarty->assign("Name","Fred"); | 
					
						
							|  |  |  |     $smarty->assign("Address",$address); | 
					
						
							|  |  |  |     $smarty->assign($db_data); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // capture the output | 
					
						
							|  |  |  | $output = $smarty->fetch("index.tpl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // do something with $output here | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo $output;</programlisting> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.get.config.vars"> | 
					
						
							|  |  |  | 			<title>get_config_vars</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>array <function>get_config_vars</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter><optional>varname</optional></parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 				This returns the given loaded config variable value. If no parameter | 
					
						
							|  |  |  | 				is given, an array of all loaded config variables is returned. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>get_config_vars</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // get loaded config template var 'foo' | 
					
						
							|  |  |  | $foo = $smarty->get_config_vars('foo'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // get all loaded config template vars | 
					
						
							|  |  |  | $config_vars = $smarty->get_config_vars(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // take a look at them | 
					
						
							|  |  |  | print_r($config_vars);</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.get.registered.object"> | 
					
						
							|  |  |  | 			<title>get_registered_object</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>array <function>get_registered_object</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>object_name</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  | 				This returns a reference to a registered object. This is useful | 
					
						
							|  |  |  | 				from within a custom function when you need direct access to a | 
					
						
							|  |  |  | 				registered object. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>get_registered_object</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | function smarty_block_foo($params, &$smarty) { | 
					
						
							|  |  |  | 	if (isset[$params['object']]) { | 
					
						
							|  |  |  | 		// get reference to registered object | 
					
						
							|  |  |  |    		$obj_ref =& $smarty->&get_registered_object($params['object']); | 
					
						
							|  |  |  | 		// use $obj_ref is now a reference to the object | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | }</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.get.template.vars"> | 
					
						
							|  |  |  | 			<title>get_template_vars</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>array <function>get_template_vars</function></funcdef> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | 				<paramdef>string <parameter><optional>varname</optional></parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | 				This returns the given assigned variable value. If no parameter | 
					
						
							|  |  |  | 				is given, an array of all assigned variables is returned. | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <title>get_template_vars</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | // get assigned template var 'foo' | 
					
						
							|  |  |  | $foo = $smarty->get_template_vars('foo'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // get all assigned template vars | 
					
						
							|  |  |  | $tpl_vars = $smarty->get_template_vars(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // take a look at them | 
					
						
							| 
									
										
										
										
											2003-02-27 17:32:08 +00:00
										 |  |  | print_r($tpl_vars);</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.is.cached"> | 
					
						
							|  |  |  | 			<title>is_cached</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>is_cached</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>template</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>[string <parameter>cache_id</parameter>]</paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  |                 This returns true if there is a valid cache for this template. | 
					
						
							|  |  |  |                 This only works if <link | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |                 linkend="variable.caching">caching</link> is set to true. | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>is_cached</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(!$smarty->is_cached("index.tpl")) { | 
					
						
							|  |  |  |     // do database calls, assign vars here | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display("index.tpl");</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  |             <para> | 
					
						
							|  |  |  |                 You can also pass a cache id as an an optional second parameter | 
					
						
							|  |  |  |                 in case you want multiple caches for the given template. | 
					
						
							|  |  |  |             </para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>is_cached with multiple-cache template</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(!$smarty->is_cached("index.tpl","FrontPage")) { | 
					
						
							|  |  |  |     // do database calls, assign vars here | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display("index.tpl","FrontPage");</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  |         <sect1 id="api.load.filter"> | 
					
						
							|  |  |  |          <title>load_filter</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |            <funcdef>void <function>load_filter</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>type</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |           This function can be used to load a filter plugin. The first | 
					
						
							|  |  |  |           argument specifies the type of the filter to load and can be one | 
					
						
							|  |  |  |           of the following: 'pre', 'post', or 'output'. The second argument | 
					
						
							|  |  |  |           specifies the name of the filter plugin, for example, 'trim'. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |          </para> | 
					
						
							|  |  |  | <example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <title>loading filter plugins</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2002-07-23 13:52:23 +00:00
										 |  |  | $smarty->load_filter('pre', 'trim'); // load prefilter named 'trim' | 
					
						
							|  |  |  | $smarty->load_filter('pre', 'datefooter'); // load another prefilter named 'datefooter' | 
					
						
							|  |  |  | $smarty->load_filter('output', 'compress'); // load output filter named 'compress'</programlisting> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | </example> | 
					
						
							|  |  |  |         </sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.register.block"> | 
					
						
							|  |  |  | 			<title>register_block</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>register_block</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>impl</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  |              Use this to dynamically register block functions plugins. | 
					
						
							|  |  |  |              Pass in the block function name, followed by the PHP | 
					
						
							|  |  |  |              function name that implements it. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>register_block</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | /* PHP */ | 
					
						
							|  |  |  | $smarty->register_block("translate", "do_translation"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function do_translation ($params, $content, &$smarty) { | 
					
						
							|  |  |  |     if ($content) { | 
					
						
							|  |  |  |         $lang = $params['lang']; | 
					
						
							|  |  |  |         // do some translation with $content | 
					
						
							|  |  |  |         echo $translation; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* template *} | 
					
						
							|  |  |  | {translate lang="br"} | 
					
						
							|  |  |  |    Hello, world! | 
					
						
							|  |  |  | {/translate}</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.register.compiler.function"> | 
					
						
							|  |  |  | 			<title>register_compiler_function</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<funcdef>void <function>register_compiler_function</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>impl</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 Use this to dynamically register a compiler function plugin. | 
					
						
							|  |  |  |                 Pass in the compiler function name, followed by the PHP | 
					
						
							|  |  |  |                 function that implements it. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.register.function"> | 
					
						
							|  |  |  | 			<title>register_function</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<funcdef>void <function>register_function</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>impl</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |              Use this to dynamically register template function plugins. | 
					
						
							|  |  |  |              Pass in the template function name, followed by the PHP | 
					
						
							|  |  |  |              function name that implements it. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <example> | 
					
						
							|  |  |  | <title>register_function</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | $smarty->register_function("date_now", "print_current_date"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function print_current_date ($params) { | 
					
						
							|  |  |  |     extract($params); | 
					
						
							|  |  |  |     if(empty($format)) | 
					
						
							|  |  |  |         $format="%b %e, %Y"; | 
					
						
							|  |  |  |     echo strftime($format,time()); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // now you can use this in Smarty to print the current date: {date_now} | 
					
						
							|  |  |  | // or, {date_now format="%Y/%m/%d"} to format it.</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.register.modifier"> | 
					
						
							|  |  |  |          <title>register_modifier</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>register_modifier</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>impl</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           Use this to dynamically register modifier plugin. Pass in the | 
					
						
							|  |  |  |           template modifier name, followed by the PHP function that it | 
					
						
							|  |  |  |           implements it. | 
					
						
							|  |  |  |          </para> | 
					
						
							|  |  |  | <example> | 
					
						
							|  |  |  | <title>register_modifier</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | // let's map PHP's stripslashes function to a Smarty modifier. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->register_modifier("sslash","stripslashes"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // now you can use {$var|sslash} to strip slashes from variables</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							| 
									
										
										
										
											2003-02-02 08:07:57 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.register.object"> | 
					
						
							|  |  |  | 			<title>register_object</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>register_object</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>object_name</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>object <parameter>$object</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>array <parameter>allowed methods/properties</parameter></paramdef> | 
					
						
							|  |  |  | 				<paramdef>boolean <parameter>format</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  |             <para> | 
					
						
							|  |  |  | 			This is to register an object for use in the templates. See the | 
					
						
							|  |  |  | 			<link linkend="advanced.features.objects">object section</link> | 
					
						
							|  |  |  | 			of the manual for examples. | 
					
						
							|  |  |  |             </para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.register.outputfilter"> | 
					
						
							|  |  |  | 			<title>register_outputfilter</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>register_outputfilter</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>function_name</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  |             <para> | 
					
						
							|  |  |  |              Use this to dynamically register outputfilters to operate on | 
					
						
							|  |  |  |              a template's output before it is displayed. See | 
					
						
							|  |  |  |              <link linkend="advanced.features.outputfilters">template output | 
					
						
							|  |  |  |              filters</link> | 
					
						
							|  |  |  |              for more information on how to set up an output filter function. | 
					
						
							|  |  |  |             </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.register.postfilter"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<title>register_postfilter</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>register_postfilter</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>function_name</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  |                 Use this to dynamically register postfilters to run templates | 
					
						
							|  |  |  |                 through after they are compiled. See <link | 
					
						
							| 
									
										
										
										
											2002-03-01 20:50:49 +00:00
										 |  |  |                 linkend="advanced.features.postfilters">template postfilters</link> for | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |                 more information on how to setup a postfiltering function. | 
					
						
							|  |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.register.prefilter"> | 
					
						
							|  |  |  | 			<title>register_prefilter</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<funcdef>void <function>register_prefilter</function></funcdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 				<paramdef>string <parameter>function_name</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 Use this to dynamically register prefilters to run templates | 
					
						
							|  |  |  |                 through before they are compiled. See <link | 
					
						
							|  |  |  |                 linkend="advanced.features.prefilters">template prefilters</link> for | 
					
						
							|  |  |  |                 more information on how to setup a prefiltering function. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |         <sect1 id="api.register.resource"> | 
					
						
							|  |  |  |          <title>register_resource</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |            <funcdef>void <function>register_resource</function></funcdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |            <paramdef>array <parameter>resource_funcs</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |           Use this to dynamically register a resource plugin with Smarty. | 
					
						
							|  |  |  |           Pass in the name of the resource and the array of PHP functions | 
					
						
							|  |  |  |           implementing it. See | 
					
						
							|  |  |  |           <link linkend="template.resources">template resources</link> | 
					
						
							|  |  |  |           for more information on how to setup a function for fetching | 
					
						
							|  |  |  |           templates. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |          </para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <example> | 
					
						
							|  |  |  | <title>register_resource</title> | 
					
						
							|  |  |  | <programlisting> | 
					
						
							|  |  |  | $smarty->register_resource("db", array("db_get_template", | 
					
						
							|  |  |  |                                        "db_get_timestamp", | 
					
						
							|  |  |  |                                        "db_get_secure", | 
					
						
							|  |  |  |                                        "db_get_trusted"));</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |         <sect1 id="api.trigger.error"> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |          <title>trigger_error</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>trigger_error</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>error_msg</parameter></paramdef> | 
					
						
							|  |  |  |            <paramdef>[int <parameter>level</parameter>]</paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           This function can be used to output an error message using Smarty. | 
					
						
							|  |  |  |           <parameter>level</parameter> parameter can be one of the values | 
					
						
							|  |  |  |           used for trigger_error() PHP function, i.e. E_USER_NOTICE, | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |           E_USER_WARNING, etc. By default it's E_USER_WARNING. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |          </para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |         </sect1> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |         <sect1 id="api.template.exists"> | 
					
						
							|  |  |  |          <title>template_exists</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>bool <function>template_exists</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>template</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           This function checks whether the specified template exists. It can | 
					
						
							|  |  |  |           accept either a path to the template on the filesystem or a | 
					
						
							|  |  |  |           resource string specifying the template. | 
					
						
							|  |  |  |          </para> | 
					
						
							|  |  |  |         </sect1> | 
					
						
							|  |  |  |         <sect1 id="api.unregister.block"> | 
					
						
							|  |  |  |          <title>unregister_block</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>unregister_block</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           Use this to dynamically unregister block function plugin. | 
					
						
							|  |  |  |           Pass in the block function name. | 
					
						
							|  |  |  |          </para> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  |         <sect1 id="api.unregister.compiler.function"> | 
					
						
							|  |  |  |          <title>unregister_compiler_function</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>unregister_compiler_function</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           Use this to dynamically unregister a compiler function. Pass in | 
					
						
							|  |  |  |           the name of the compiler function. | 
					
						
							|  |  |  |          </para> | 
					
						
							|  |  |  |         </sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.unregister.function"> | 
					
						
							|  |  |  |          <title>unregister_function</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>unregister_function</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           Use this to dynamically unregister template function plugin. | 
					
						
							|  |  |  |           Pass in the template function name. | 
					
						
							|  |  |  |          </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <title>unregister_function</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // we don't want template designers to have access to system files | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | $smarty->unregister_function("fetch");</programlisting> | 
					
						
							|  |  |  | </example> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							|  |  |  | 		<sect1 id="api.unregister.modifier"> | 
					
						
							|  |  |  |          <title>unregister_modifier</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>unregister_modifier</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           Use this to dynamically unregister modifier plugin. Pass in the | 
					
						
							|  |  |  |           template modifier name. | 
					
						
							|  |  |  |          </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <title>unregister_modifier</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | // we don't want template designers to strip tags from elements | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | $smarty->unregister_modifier("strip_tags");</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2003-02-02 08:07:57 +00:00
										 |  |  | 		<sect1 id="api.unregister.object"> | 
					
						
							|  |  |  | 			<title>unregister_object</title> | 
					
						
							|  |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							|  |  |  | 			<funcdef>void <function>unregister_object</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>object_name</parameter></paramdef> | 
					
						
							|  |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							|  |  |  |                 Use this to unregister an object. | 
					
						
							|  |  |  | 			</para> | 
					
						
							|  |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.unregister.outputfilter"> | 
					
						
							|  |  |  | 			<title>unregister_outputfilter</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<funcdef>void <function>unregister_outputfilter</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>function_name</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 Use this to dynamically unregister an output filter. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.unregister.postfilter"> | 
					
						
							|  |  |  | 			<title>unregister_postfilter</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<funcdef>void <function>unregister_postfilter</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>function_name</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 Use this to dynamically unregister a postfilter. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		<sect1 id="api.unregister.prefilter"> | 
					
						
							|  |  |  | 			<title>unregister_prefilter</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			<funcsynopsis> | 
					
						
							|  |  |  | 			<funcprototype> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 			<funcdef>void <function>unregister_prefilter</function></funcdef> | 
					
						
							|  |  |  | 				<paramdef>string <parameter>function_name</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</funcprototype> | 
					
						
							|  |  |  | 			</funcsynopsis> | 
					
						
							|  |  |  | 			<para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |                 Use this to dynamically unregister a prefilter. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 			</para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  |         <sect1 id="api.unregister.resource"> | 
					
						
							|  |  |  |          <title>unregister_resource</title> | 
					
						
							|  |  |  |          <funcsynopsis> | 
					
						
							|  |  |  |           <funcprototype> | 
					
						
							|  |  |  |            <funcdef>void <function>unregister_resource</function></funcdef> | 
					
						
							|  |  |  |            <paramdef>string <parameter>name</parameter></paramdef> | 
					
						
							|  |  |  |           </funcprototype> | 
					
						
							|  |  |  |          </funcsynopsis> | 
					
						
							|  |  |  |          <para> | 
					
						
							|  |  |  |           Use this to dynamically unregister a resource plugin. Pass in the | 
					
						
							|  |  |  |           name of the resource. | 
					
						
							|  |  |  |          </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <example> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | <title>unregister_resource</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <programlisting> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | $smarty->unregister_resource("db");</programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | </example> | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  | 		</sect1> | 
					
						
							|  |  |  |        </chapter> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-07-03 20:08:33 +00:00
										 |  |  |   <chapter id="caching"> | 
					
						
							|  |  |  |    <title>Caching</title> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |    Caching is used to speed up a call to <link | 
					
						
							|  |  |  |    linkend="api.display">display()</link> or <link | 
					
						
							|  |  |  |    linkend="api.fetch">fetch()</link> by saving its output to a file. If a | 
					
						
							|  |  |  |    cached version of the call is available, that is displayed instead of | 
					
						
							|  |  |  |    regenerating the output. Caching can speed things up tremendously, | 
					
						
							|  |  |  |    especially templates with longer computation times. Since the output of | 
					
						
							|  |  |  |    display() or fetch() is cached, one cache file could conceivably be made up | 
					
						
							|  |  |  |    of several template files, config files, etc. | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |    Since templates are dynamic, it is important to be careful what you are | 
					
						
							|  |  |  |    caching and for how long. For instance, if you are displaying the front page | 
					
						
							|  |  |  |    of your website that does not change its content very often, it might work | 
					
						
							|  |  |  |    well to cache this page for an hour or more. On the other hand, if you are | 
					
						
							|  |  |  |    displaying a page with a weather map containing new information by the | 
					
						
							|  |  |  |    minute, it would not make sense to cache this page. | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    <sect1 id="caching.setting.up"> | 
					
						
							|  |  |  |    <title>Setting Up Caching</title> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |    The first thing to do is enable caching. This is done by setting <link | 
					
						
							|  |  |  |    linkend="variable.caching">$caching</link> = true (or 1.)      | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>enabling caching</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl');</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	With caching enabled, the function call to display('index.tpl') will render | 
					
						
							|  |  |  | 	the template as usual, but also saves a copy of its output to a file (a | 
					
						
							|  |  |  | 	cached copy) in the <link linkend="variable.cache.dir">$cache_dir</link>. | 
					
						
							|  |  |  | 	Upon the next call to display('index.tpl'), the cached copy will be used | 
					
						
							|  |  |  | 	instead of rendering the template again. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<note> | 
					
						
							|  |  |  | 	<title>Technical Note</title> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	The files in the $cache_dir are named similar to the template name. | 
					
						
							|  |  |  | 	Although they end in the ".php" extention, they are not really executable | 
					
						
							|  |  |  | 	php scripts. Do not edit these files! | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	</note> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	Each cached page has a limited lifetime determined by <link | 
					
						
							|  |  |  | 	linkend="variable.cache.lifetime">$cache_lifetime</link>. The default value | 
					
						
							|  |  |  | 	is 3600 seconds, or 1 hour. After that time expires, the cache is | 
					
						
							|  |  |  | 	regenerated. It is possible to give individual caches their own expiration | 
					
						
							|  |  |  | 	time by setting $caching = 2. See the documentation on <link | 
					
						
							|  |  |  | 	linkend="variable.cache.lifetime">$cache_lifetime</link> for details. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>setting cache_lifetime per cache</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = 2; // lifetime is per cache | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // set the cache_lifetime for index.tpl to 15 minutes | 
					
						
							|  |  |  | $smarty->cache_lifetime = 300; | 
					
						
							|  |  |  | $smarty->display('index.tpl'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // set the cache_lifetime for home.tpl to 1 hour | 
					
						
							|  |  |  | $smarty->cache_lifetime = 3600; | 
					
						
							|  |  |  | $smarty->display('home.tpl'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // NOTE: the following $cache_lifetime setting will not work when $caching = 2. | 
					
						
							|  |  |  | // The cache lifetime for home.tpl has already been set | 
					
						
							|  |  |  | // to 1 hour, and will no longer respect the value of $cache_lifetime. | 
					
						
							|  |  |  | // The home.tpl cache will still expire after 1 hour. | 
					
						
							|  |  |  | $smarty->cache_lifetime = 30; // 30 seconds | 
					
						
							|  |  |  | $smarty->display('home.tpl');</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	If <link linkend="variable.compile.check">$compile_check</link> is enabled, | 
					
						
							|  |  |  | 	every template file and config file that is involved with the cache file is | 
					
						
							|  |  |  | 	checked for modification. If any of the files have been modified since the | 
					
						
							|  |  |  | 	cache was generated, the cache is immediately regenerated. This is a slight | 
					
						
							|  |  |  | 	overhead so for optimum performance, leave $compile_check set to false. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>enabling $compile_check</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | $smarty->compile_check = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl');</programlisting> | 
					
						
							|  |  |  | 	</example> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	If <link linkend="variable.force.compile">$force_compile</link> is enabled, | 
					
						
							|  |  |  | 	the cache files will always be regenerated. This effectively turns off | 
					
						
							|  |  |  | 	caching. $force_compile is usually for debugging purposes only, a more | 
					
						
							|  |  |  | 	efficient way of disabling caching is to set <link | 
					
						
							|  |  |  | 	linkend="variable.caching">$caching</link> = false (or 0.) | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	The <link linkend="api.is.cached">is_cached()</link> function | 
					
						
							|  |  |  | 	can be used to test if a template has a valid cache or not. If you have a | 
					
						
							|  |  |  | 	cached template that requires something like a database fetch, you can use | 
					
						
							|  |  |  | 	this to skip that process. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using is_cached()</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(!$smarty->is_cached('index.tpl')) { | 
					
						
							|  |  |  | 	// No cache available, do variable assignments here. | 
					
						
							|  |  |  | 	$contents = get_database_contents(); | 
					
						
							|  |  |  | 	$smarty->assign($contents); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl');</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	You can keep parts of a page dynamic with the <link | 
					
						
							|  |  |  | 	linkend="language.function.insert">insert</link> template function. Let's | 
					
						
							|  |  |  | 	say the whole page can be cached except for a banner that is displayed down | 
					
						
							|  |  |  | 	the right side of the page. By using an insert function for the banner, you | 
					
						
							|  |  |  | 	can keep this element dynamic within the cached content. See the | 
					
						
							|  |  |  | 	documentation on <link linkend="language.function.insert">insert</link> for | 
					
						
							|  |  |  | 	details and examples. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	You can clear all the cache files with the <link | 
					
						
							|  |  |  | 	linkend="api.clear.all.cache">clear_all_cache()</link> function, or | 
					
						
							|  |  |  | 	individual cache files (or groups) with the <link | 
					
						
							|  |  |  | 	linkend="api.clear.cache">clear_cache()</link> function.	 | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>clearing the cache</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear out all cache files | 
					
						
							|  |  |  | $smarty->clear_all_cache(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear only cache for index.tpl | 
					
						
							|  |  |  | $smarty->clear_cache('index.tpl'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl');</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  |    <sect1 id="caching.multiple.caches"> | 
					
						
							|  |  |  |     <title>Multiple Caches Per Page</title> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	You can have multiple cache files for a single call to display() or | 
					
						
							|  |  |  | 	fetch(). Let's say that a call to display('index.tpl') may have several | 
					
						
							|  |  |  | 	different output contents depending on some condition, and you want | 
					
						
							|  |  |  | 	separate caches for each one. You can do this by passing a cache_id as the | 
					
						
							|  |  |  | 	second parameter to the function call. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>passing a cache_id to display()</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $my_cache_id = $_GET['article_id']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl',$my_cache_id);</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	Above, we are passing the variable $my_cache_id to display() as the | 
					
						
							|  |  |  | 	cache_id. For each unique value of $my_cache_id, a separate cache will be | 
					
						
							|  |  |  | 	generated for index.tpl. In this example, "article_id" was passed in the | 
					
						
							|  |  |  | 	URL and is used as the cache_id. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<note> | 
					
						
							|  |  |  | 	<title>Technical Note</title> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	Be very cautious when passing values from a client (web browser) into | 
					
						
							|  |  |  | 	Smarty (or any PHP application.) Although the above example of using the | 
					
						
							|  |  |  | 	article_id from the URL looks handy, it could have bad consequences. The | 
					
						
							|  |  |  | 	cache_id is used to create a directory on the file system, so if the user | 
					
						
							|  |  |  | 	decided to pass an extremely large value for article_id, or write a script | 
					
						
							|  |  |  | 	that sends random article_ids at a rapid pace, this could possibly cause | 
					
						
							|  |  |  | 	problems at the server level. Be sure to sanitize any data passed in before | 
					
						
							|  |  |  | 	using it. In this instance, maybe you know the article_id has a length of | 
					
						
							|  |  |  | 	10 characters and is made up of alpha-numerics only, and must be a valid | 
					
						
							|  |  |  | 	article_id in the database. Check for this! | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	</note> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	Be sure to pass the same cache_id as the | 
					
						
							|  |  |  | 	second parameter to <link linkend="api.is.cached">is_cached()</link> and | 
					
						
							|  |  |  | 	<link linkend="api.clear.cache">clear_cache()</link>. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<example> | 
					
						
							|  |  |  |      <title>passing a cache_id to is_cached()</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $my_cache_id = $_GET['article_id']; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(!$smarty->is_cached('index.tpl',$my_cache_id)) { | 
					
						
							|  |  |  | 	// No cache available, do variable assignments here. | 
					
						
							|  |  |  | 	$contents = get_database_contents(); | 
					
						
							|  |  |  | 	$smarty->assign($contents); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl',$my_cache_id);</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	You can clear all caches for a particular cache_id by passing null as the | 
					
						
							|  |  |  | 	first parameter to clear_cache(). | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<example> | 
					
						
							|  |  |  |      <title>clearing all caches for a particular cache_id</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear all caches with "sports" as the cache_id | 
					
						
							|  |  |  | $smarty->clear_cache(null,"sports"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl',"sports");</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	In this manner, you can "group" your caches together by giving them the | 
					
						
							|  |  |  | 	same cache_id. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  |    <sect1 id="caching.groups"> | 
					
						
							|  |  |  |     <title>Cache Groups</title> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	You can do more elaborate grouping by setting up cache_id groups. This is | 
					
						
							|  |  |  | 	accomplished by separating each sub-group with a vertical bar "|" in the | 
					
						
							|  |  |  | 	cache_id value. You can have as many sub-groups as you like. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<example> | 
					
						
							|  |  |  |      <title>cache_id groups</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | require('Smarty.class.php'); | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->caching = true; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear all caches with "sports|basketball" as the first two cache_id groups | 
					
						
							|  |  |  | $smarty->clear_cache(null,"sports|basketball"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // clear all caches with "sports" as the first cache_id group. This would | 
					
						
							|  |  |  | // include "sports|basketball", or "sports|(anything)|(anything)|(anything)|..." | 
					
						
							|  |  |  | $smarty->clear_cache(null,"sports"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl',"sports|basketball");</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    <note> | 
					
						
							|  |  |  |    <title>Technical Note</title> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |    The cache grouping does NOT use the path to the template as any part of the | 
					
						
							|  |  |  |    cache_id. For example, if you have display('themes/blue/index.tpl'), you | 
					
						
							|  |  |  |    cannot clear the cache for everything under the "themes/blue" directory. If | 
					
						
							|  |  |  |    you want to do that, you must group them in the cache_id, such as | 
					
						
							|  |  |  |    display('themes/blue/index.tpl','themes|blue'); Then you can clear the | 
					
						
							|  |  |  |    caches for the blue theme with clear_cache(null,'themes|blue'); | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    </note> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  |   </chapter> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |   <chapter id="advanced.features"> | 
					
						
							|  |  |  |    <title>Advanced Features</title> | 
					
						
							| 
									
										
										
										
											2003-02-02 08:07:57 +00:00
										 |  |  |    <sect1 id="advanced.features.objects"> | 
					
						
							|  |  |  |     <title>Objects</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Smarty allows access to PHP objects through the templates. There are | 
					
						
							|  |  |  | 	 two ways to access them. One way is to register objects to the template, | 
					
						
							|  |  |  | 	 then use access them via syntax similar to custom functions. The other way | 
					
						
							|  |  |  | 	 is to assign objects to the templates and access them much like any other | 
					
						
							|  |  |  | 	 assigned variable. The first method has a much nicer template syntax. It | 
					
						
							|  |  |  | 	 is also more secure, as a registered object can be restricted to certain | 
					
						
							|  |  |  | 	 methods or properties. However, a registered object cannot be looped over | 
					
						
							|  |  |  | 	 or assigned in arrays of objects, etc. The method you choose will be | 
					
						
							|  |  |  | 	 determined by your needs, but use the first method whenever possible to | 
					
						
							|  |  |  | 	 keep template syntax to a minimum. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  |     If security is enabled, no private methods or functions can be accessed | 
					
						
							|  |  |  | 	(begininning with "_"). If a method and property of the same name exist, | 
					
						
							|  |  |  | 	the method will be used. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	You can restrict the methods and properties that can be accessed by | 
					
						
							|  |  |  | 	listing them in an array as the third registration parameter. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  | 	<para> | 
					
						
							|  |  |  | 	By default, parameters passed to objects through the templates are passed | 
					
						
							|  |  |  | 	the same way custom functions get them. An associative array is passed | 
					
						
							|  |  |  | 	as the first parameter, and the smarty object as the second. If you want | 
					
						
							|  |  |  | 	the parameters passed one at a time for each argument like traditional | 
					
						
							|  |  |  | 	object parameter passing, set the fourth registration parameter to false. | 
					
						
							|  |  |  | 	</para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using a registered or assigned object</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | // the object | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class My_Object() { | 
					
						
							|  |  |  | 	function meth1($params, &$smarty_obj) { | 
					
						
							|  |  |  | 		return "this is my meth1"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $myobj = new My_Object; | 
					
						
							|  |  |  | // registering the object (will be by reference) | 
					
						
							|  |  |  | $smarty->register_object("foobar",$myobj); | 
					
						
							|  |  |  | // if we want to restrict access to certain methods or properties, list them | 
					
						
							|  |  |  | $smarty->register_object("foobar",$myobj,array('meth1','meth2','prop1')); | 
					
						
							|  |  |  | // if you want to use the traditional object parameter format, pass a boolean of false | 
					
						
							|  |  |  | $smarty->register_object("foobar",$myobj,null,false); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // We can also assign objects. Assign by ref when possible. | 
					
						
							|  |  |  | $smarty->assign_by_ref("myobj", $myobj); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display("index.tpl"); | 
					
						
							|  |  |  | ?> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TEMPLATE: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* access our registered object *} | 
					
						
							|  |  |  | {foobar->meth1 p1="foo" p2=$bar} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* you can also assign the output *} | 
					
						
							|  |  |  | {foobar->meth1 p1="foo" p2=$bar assign="output"} | 
					
						
							|  |  |  | the output was {$output) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* access our assigned object *} | 
					
						
							|  |  |  | {$myobj->meth1("foo",$bar)}</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |   </sect1> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    <sect1 id="advanced.features.prefilters"> | 
					
						
							|  |  |  |     <title>Prefilters</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Template prefilters are PHP functions that your templates are ran through | 
					
						
							|  |  |  |      before they are compiled. This is good for preprocessing your templates | 
					
						
							|  |  |  |      to remove unwanted comments, keeping an eye on what people are putting | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |      in their templates, etc. Prefilters can be either | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      <link linkend="api.register.prefilter">registered</link> or loaded from | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |      the plugins directory by using | 
					
						
							|  |  |  |      <link linkend="api.load.filter">load_filter()</link> function or by | 
					
						
							|  |  |  |      setting | 
					
						
							|  |  |  |      <link linkend="variable.autoload.filters">$autoload_filters</link> variable. | 
					
						
							|  |  |  |      Smarty will pass the template source code as the first argument, and | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      expect the function to return the resulting template source code. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using a template prefilter</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | // put this in your application | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | function remove_dw_comments($tpl_source, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     return preg_replace("/<!--#.*-->/U","",$tpl_source); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // register the prefilter | 
					
						
							|  |  |  | $smarty->register_prefilter("remove_dw_comments"); | 
					
						
							|  |  |  | $smarty->display("index.tpl"); | 
					
						
							|  |  |  | ?> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* Smarty template index.tpl *} | 
					
						
							|  |  |  | <!--# this line will get removed by the prefilter --></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <sect1 id="advanced.features.postfilters"> | 
					
						
							|  |  |  |     <title>Postfilters</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Template postfilters are PHP functions that your templates are ran through | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |      after they are compiled. Postfilters can be either  | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      <link linkend="api.register.postfilter">registered</link> or loaded | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |      from the plugins directory by using | 
					
						
							|  |  |  |      <link linkend="api.load.filter">load_filter()</link> function or by | 
					
						
							|  |  |  |      setting | 
					
						
							|  |  |  |      <link linkend="variable.autoload.filters">$autoload_filters</link> | 
					
						
							|  |  |  |      variable. Smarty will pass the compiled template code as the first | 
					
						
							|  |  |  |      argument, and expect the function to return the result of the | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      processing. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using a template postfilter</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | // put this in your application | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | function add_header_comment($tpl_source, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     return "<?php echo \"<!-- Created by Smarty! -->\n\" ?>\n".$tpl_source; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // register the postfilter | 
					
						
							|  |  |  | $smarty->register_postfilter("add_header_comment"); | 
					
						
							|  |  |  | $smarty->display("index.tpl"); | 
					
						
							|  |  |  | ?> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* compiled Smarty template index.tpl *} | 
					
						
							|  |  |  | <!-- Created by Smarty! --> | 
					
						
							|  |  |  | {* rest of template content... *}</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |   </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |   <sect1 id="advanced.features.outputfilters"> | 
					
						
							|  |  |  |    <title>Output Filters</title> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |     When the template is invoked via display() or fetch(), its output can be | 
					
						
							|  |  |  |     sent through one or more output filters. This differs from postfilters | 
					
						
							|  |  |  |     because postfilters operate on compiled templates before they are saved to | 
					
						
							|  |  |  |     the disk, and output filters operate on the template output when it is | 
					
						
							|  |  |  |     executed. | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |     Output filters can be either  | 
					
						
							|  |  |  |     <link linkend="api.register.outputfilter">registered</link> or loaded | 
					
						
							|  |  |  |     from the plugins directory by using | 
					
						
							|  |  |  |     <link linkend="api.load.filter">load_filter()</link> function or by | 
					
						
							|  |  |  |     setting | 
					
						
							|  |  |  |     <link linkend="variable.autoload.filters">$autoload_filters</link> | 
					
						
							|  |  |  |     variable. Smarty will pass the template output as the first argument, | 
					
						
							|  |  |  |     and expect the function to return the result of the processing. | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    <example> | 
					
						
							|  |  |  |     <title>using a template outputfilter</title> | 
					
						
							|  |  |  |     <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | // put this in your application | 
					
						
							|  |  |  | function protect_email($tpl_output, &$smarty) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     $tpl_output = | 
					
						
							|  |  |  |        preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', | 
					
						
							|  |  |  |                     '$1%40$2', $tpl_output); | 
					
						
							|  |  |  |     return $tpl_output; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // register the outputfilter | 
					
						
							|  |  |  | $smarty->register_outputfilter("protect_email"); | 
					
						
							|  |  |  | $smarty->display("index.tpl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // now any occurrence of an email address in the template output will have | 
					
						
							|  |  |  | // a simple protection against spambots | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |    </example> | 
					
						
							|  |  |  |   </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |   <sect1 id="section.template.cache.handler.func"> | 
					
						
							|  |  |  |    <title>Cache Handler Function</title> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |     As an alternative to using the default file-based caching mechanism, you | 
					
						
							|  |  |  |     can specify a custom cache handling function that will be used to read, | 
					
						
							|  |  |  |     write and clear cached files. | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |     Create a function in your application that Smarty will use as a | 
					
						
							|  |  |  |     cache handler. Set the name of it in the | 
					
						
							|  |  |  |     <link linkend="variable.cache.handler.func">$cache_handler_func</link> | 
					
						
							|  |  |  |     class variable. Smarty will now use this to handle cached data. The | 
					
						
							|  |  |  |     first argument is the action, which will be one of 'read', 'write' and | 
					
						
							|  |  |  |     'clear'. The second parameter is the Smarty object. The third parameter | 
					
						
							|  |  |  |     is the cached content. Upon a write, Smarty passes the cached content | 
					
						
							|  |  |  |     in these parameters. Upon a 'read', Smarty expects your function to | 
					
						
							|  |  |  |     accept this parameter by reference and populate it with the cached | 
					
						
							|  |  |  |     data. Upon a 'clear', pass a dummy variable here since it is not used. | 
					
						
							|  |  |  |     The fourth parameter is the name of the template file (needed for | 
					
						
							|  |  |  |     read/write), the fifth parameter is the cache_id (optional), and the | 
					
						
							|  |  |  |     sixth is the compile_id (optional). | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    <example> | 
					
						
							|  |  |  |     <title>example using MySQL as a cache source</title> | 
					
						
							|  |  |  |     <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | example usage: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | include('Smarty.class.php'); | 
					
						
							|  |  |  | include('mysql_cache_handler.php'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty = new Smarty; | 
					
						
							|  |  |  | $smarty->cache_handler_func = 'mysql_cache_handler'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $smarty->display('index.tpl'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mysql database is expected in this format: | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | create database SMARTY_CACHE; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | create table CACHE_PAGES( | 
					
						
							|  |  |  | CacheID char(32) PRIMARY KEY, | 
					
						
							|  |  |  | CacheContents MEDIUMTEXT NOT NULL | 
					
						
							|  |  |  | ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	// set db host, user and pass here | 
					
						
							|  |  |  | 	$db_host = 'localhost'; | 
					
						
							|  |  |  | 	$db_user = 'myuser'; | 
					
						
							|  |  |  | 	$db_pass = 'mypass'; | 
					
						
							|  |  |  | 	$db_name = 'SMARTY_CACHE'; | 
					
						
							|  |  |  | 	$use_gzip = false; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	// create unique cache id | 
					
						
							|  |  |  | 	$CacheID = md5($tpl_file.$cache_id.$compile_id); | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) { | 
					
						
							|  |  |  | 		$smarty_obj->_trigger_error_msg("cache_handler: could not connect to database"); | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	mysql_select_db($db_name); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	switch ($action) { | 
					
						
							|  |  |  | 		case 'read': | 
					
						
							|  |  |  | 			// save cache to database | 
					
						
							|  |  |  | 			$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'"); | 
					
						
							|  |  |  | 			if(!$results) { | 
					
						
							|  |  |  | 				$smarty_obj->_trigger_error_msg("cache_handler: query failed.");			 | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$row = mysql_fetch_array($results,MYSQL_ASSOC); | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			if($use_gzip && function_exists("gzuncompress")) { | 
					
						
							|  |  |  | 				$cache_contents = gzuncompress($row["CacheContents"]); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				$cache_contents = $row["CacheContents"]; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$return = $results; | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		case 'write': | 
					
						
							|  |  |  | 			// save cache to database | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			if($use_gzip && function_exists("gzcompress")) { | 
					
						
							|  |  |  | 				// compress the contents for storage efficiency | 
					
						
							|  |  |  | 				$contents = gzcompress($cache_content); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				$contents = $cache_content; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$results = mysql_query("replace into CACHE_PAGES values( | 
					
						
							|  |  |  | 							'$CacheID', | 
					
						
							|  |  |  | 							'".addslashes($contents)."') | 
					
						
							|  |  |  | 						"); | 
					
						
							|  |  |  | 			if(!$results) { | 
					
						
							|  |  |  | 				$smarty_obj->_trigger_error_msg("cache_handler: query failed.");			 | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$return = $results; | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		case 'clear': | 
					
						
							|  |  |  | 			// clear cache info | 
					
						
							|  |  |  | 			if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) { | 
					
						
							|  |  |  | 				// clear them all | 
					
						
							|  |  |  | 				$results = mysql_query("delete from CACHE_PAGES");			 | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");			 | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(!$results) { | 
					
						
							|  |  |  | 				$smarty_obj->_trigger_error_msg("cache_handler: query failed.");			 | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			$return = $results; | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 		default: | 
					
						
							|  |  |  | 			// error, unknown action | 
					
						
							|  |  |  | 			$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\""); | 
					
						
							|  |  |  | 			$return = false; | 
					
						
							|  |  |  | 			break; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	mysql_close($link); | 
					
						
							|  |  |  | 	return $return; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |   </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   <sect1 id="template.resources"> | 
					
						
							|  |  |  |    <title>Resources</title> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |     The templates may come from a variety of sources. When you display or | 
					
						
							|  |  |  |     fetch a template, or when you include a template from within another | 
					
						
							|  |  |  |     template, you supply a resource type, followed by the appropriate path | 
					
						
							|  |  |  |     and template name. | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    <sect2 id="templates.from.template.dir"> | 
					
						
							|  |  |  |     <title>Templates from $template_dir</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Templates from the $template_dir do not require a template | 
					
						
							|  |  |  |      resource, although you can use the file: resource for consistancy. | 
					
						
							|  |  |  |      Just supply the path to the template you want to use relative to | 
					
						
							|  |  |  |      the $template_dir root directory. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using templates from $template_dir</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | // from PHP script | 
					
						
							|  |  |  | $smarty->display("index.tpl"); | 
					
						
							|  |  |  | $smarty->display("admin/menu.tpl"); | 
					
						
							|  |  |  | $smarty->display("file:admin/menu.tpl"); // same as one above | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* from within Smarty template *} | 
					
						
							|  |  |  | {include file="index.tpl"} | 
					
						
							|  |  |  | {include file="file:index.tpl"} {* same as one above *}</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect2> | 
					
						
							|  |  |  |    <sect2 id="templates.from.any.dir"> | 
					
						
							|  |  |  |     <title>Templates from any directory</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Templates outside of the $template_dir require the file: template | 
					
						
							|  |  |  |      resource type, followed by the absolute path and name of the | 
					
						
							|  |  |  |      template. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using templates from any directory</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | // from PHP script | 
					
						
							|  |  |  | $smarty->display("file:/export/templates/index.tpl"); | 
					
						
							|  |  |  | $smarty->display("file:/path/to/my/templates/menu.tpl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* from within Smarty template *} | 
					
						
							|  |  |  | {include file="file:/usr/local/share/templates/navigation.tpl"}</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <sect3> | 
					
						
							|  |  |  |      <title>Windows Filepaths</title> | 
					
						
							|  |  |  |      <para> | 
					
						
							|  |  |  |       If you are using a Windows machine, filepaths usually include a | 
					
						
							|  |  |  |       drive letter (C:) at the beginning of the pathname. Be sure to use | 
					
						
							|  |  |  |       "file:" in the path to avoid namespace conflicts and get the | 
					
						
							|  |  |  |       desired results. | 
					
						
							|  |  |  |      </para> | 
					
						
							|  |  |  |      <example> | 
					
						
							|  |  |  |       <title>using templates from windows file paths</title> | 
					
						
							|  |  |  |       <programlisting> | 
					
						
							|  |  |  | // from PHP script | 
					
						
							|  |  |  | $smarty->display("file:C:/export/templates/index.tpl"); | 
					
						
							|  |  |  | $smarty->display("file:F:/path/to/my/templates/menu.tpl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* from within Smarty template *} | 
					
						
							|  |  |  | {include file="file:D:/usr/local/share/templates/navigation.tpl"}</programlisting> | 
					
						
							|  |  |  |      </example> | 
					
						
							|  |  |  |     </sect3> | 
					
						
							|  |  |  |    </sect2> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <sect2 id="templates.from.elsewhere"> | 
					
						
							|  |  |  |     <title>Templates from other sources</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      You can retrieve templates using whatever possible source you can | 
					
						
							|  |  |  |      access with PHP: databases, sockets, LDAP, and so on. You do this | 
					
						
							|  |  |  |      by writing resource plugin functions and registering them with | 
					
						
							|  |  |  |      Smarty. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      See <link linkend="plugins.resources">resource plugins</link> | 
					
						
							|  |  |  |      section for more information on the functions you are supposed | 
					
						
							|  |  |  |      to provide. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     <note> | 
					
						
							|  |  |  |      <para> | 
					
						
							|  |  |  |       Note that you cannot override the built-in | 
					
						
							|  |  |  |       <literal>file</literal> resource, but you can provide a resource | 
					
						
							|  |  |  |       that fetches templates from the file system in some other way by | 
					
						
							|  |  |  |       registering under another resource name. | 
					
						
							|  |  |  |      </para> | 
					
						
							|  |  |  |     </note> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using custom resources</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | // from PHP script | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // put these function somewhere in your application | 
					
						
							| 
									
										
										
										
											2003-01-28 15:05:13 +00:00
										 |  |  | function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj) | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     // do database call here to fetch your template, | 
					
						
							|  |  |  |     // populating $tpl_source | 
					
						
							|  |  |  |     $sql = new SQL; | 
					
						
							|  |  |  |     $sql->query("select tpl_source | 
					
						
							|  |  |  |                    from my_table | 
					
						
							|  |  |  |                   where tpl_name='$tpl_name'"); | 
					
						
							|  |  |  |     if ($sql->num_rows) { | 
					
						
							|  |  |  |         $tpl_source = $sql->record['tpl_source']; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-01-28 15:05:13 +00:00
										 |  |  | function db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj) | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     // do database call here to populate $tpl_timestamp. | 
					
						
							|  |  |  |     $sql = new SQL; | 
					
						
							|  |  |  |     $sql->query("select tpl_timestamp | 
					
						
							|  |  |  |                    from my_table | 
					
						
							|  |  |  |                   where tpl_name='$tpl_name'"); | 
					
						
							|  |  |  |     if ($sql->num_rows) { | 
					
						
							|  |  |  |         $tpl_timestamp = $sql->record['tpl_timestamp']; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function db_get_secure($tpl_name, &$smarty_obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // assume all templates are secure | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function db_get_trusted($tpl_name, &$smarty_obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // not used for templates | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // register the resource name "db" | 
					
						
							|  |  |  | $smarty->register_resource("db", array("db_get_template", | 
					
						
							|  |  |  |                                        "db_get_timestamp", | 
					
						
							|  |  |  |                                        "db_get_secure", | 
					
						
							|  |  |  |                                        "db_get_trusted")); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // using resource from php script | 
					
						
							|  |  |  | $smarty->display("db:index.tpl"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {* using resource from within Smarty template *} | 
					
						
							|  |  |  | {include file="db:/extras/navigation.tpl"}</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect2> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <sect2 id="default.template.handler.function"> | 
					
						
							|  |  |  |     <title>Default template handler function</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      You can specify a function that is used to retrieve template | 
					
						
							|  |  |  |      contents in the event the template cannot be retrieved from its | 
					
						
							|  |  |  |      resource. One use of this is to create templates that do not exist | 
					
						
							|  |  |  |      on-the-fly. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>using the default template handler function</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | // put this function somewhere in your application | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp, &$smarty_obj) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if( $resource_type == 'file' ) { | 
					
						
							|  |  |  | 		if ( ! is_readable ( $resource_name )) { | 
					
						
							|  |  |  | 			// create the template file, return contents. | 
					
						
							|  |  |  | 			$template_source = "This is a new template."; | 
					
						
							|  |  |  | 			$template_timestamp = time(); | 
					
						
							|  |  |  | 			$smarty_obj->_write_file($resource_name,$template_source); | 
					
						
							|  |  |  | 			return true; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  | 		// not a file | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // set the default handler | 
					
						
							|  |  |  | $smarty->default_template_handler_func = 'make_template'; | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect2> | 
					
						
							|  |  |  |   </sect1> | 
					
						
							|  |  |  |  </chapter> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  <chapter id="plugins"> | 
					
						
							|  |  |  |   <title>Extending Smarty With Plugins</title> | 
					
						
							|  |  |  |   <para> | 
					
						
							|  |  |  |    Version 2.0 introduced the plugin architecture that is used | 
					
						
							|  |  |  |    for almost all the customizable functionality of Smarty. This includes: | 
					
						
							|  |  |  |    <itemizedlist spacing=compact> | 
					
						
							|  |  |  |     <listitem><simpara>functions</simpara></listitem> | 
					
						
							|  |  |  |     <listitem><simpara>modifiers</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |     <listitem><simpara>block functions</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <listitem><simpara>compiler functions</simpara></listitem> | 
					
						
							|  |  |  |     <listitem><simpara>prefilters</simpara></listitem> | 
					
						
							|  |  |  |     <listitem><simpara>postfilters</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |     <listitem><simpara>outputfilters</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <listitem><simpara>resources</simpara></listitem> | 
					
						
							|  |  |  |     <listitem><simpara>inserts</simpara></listitem> | 
					
						
							|  |  |  |    </itemizedlist> | 
					
						
							|  |  |  |    With the exception of resources, backwards compatibility with the old | 
					
						
							|  |  |  |    way of registering handler functions via register_* API is preserved. If | 
					
						
							|  |  |  |    you did not use the API but instead modified the class variables | 
					
						
							|  |  |  |    <literal>$custom_funcs</literal>, <literal>$custom_mods</literal>, and | 
					
						
							|  |  |  |    other ones directly, then you will need to adjust your scripts to either | 
					
						
							|  |  |  |    use the API or convert your custom functionality into plugins. | 
					
						
							|  |  |  |   </para> | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  |   <sect1> | 
					
						
							|  |  |  |    <title>How Plugins Work</title> | 
					
						
							|  |  |  |    <para> | 
					
						
							|  |  |  |     Plugins are always loaded on demand. Only the specific modifiers, | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |     functions, resources, etc invoked in the templates scripts will be | 
					
						
							|  |  |  |     loaded. Moreover, each plugin is loaded only once, even if you have | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     several different instances of Smarty running within the same request. | 
					
						
							|  |  |  |    </para> | 
					
						
							|  |  |  |    <para> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |     Pre/postfilters and output filters are a bit of a special case. Since | 
					
						
							|  |  |  |     they are not mentioned in the templates, they must be registered or | 
					
						
							|  |  |  |     loaded explicitly via API functions before the template is processed. | 
					
						
							|  |  |  |     The order in which multiple filters of the same type are executed | 
					
						
							|  |  |  |     depends on the order in which they are registered or loaded. | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |    <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     There is only one plugins directory (for performance reasons). To | 
					
						
							|  |  |  |     install a plugin, simply place it in the directory and Smarty will use | 
					
						
							|  |  |  |     it automatically. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |    </para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |   </sect1> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    <sect1 id="plugins.naming.conventions"> | 
					
						
							|  |  |  |     <title>Naming Conventions</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Plugin files and functions must follow a very specific naming | 
					
						
							|  |  |  |      convention in order to be located by Smarty. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      The plugin files must be named as follows: | 
					
						
							|  |  |  |      <blockquote> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        <filename> | 
					
						
							|  |  |  |         <replaceable>type</replaceable>.<replaceable>name</replaceable>.php | 
					
						
							|  |  |  |        </filename> | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |      </blockquote> | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Where <literal>type</literal> is one of these plugin types: | 
					
						
							|  |  |  |      <itemizedlist spacing=compact> | 
					
						
							|  |  |  |       <listitem><simpara>function</simpara></listitem> | 
					
						
							|  |  |  |       <listitem><simpara>modifier</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |       <listitem><simpara>block</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <listitem><simpara>compiler</simpara></listitem> | 
					
						
							|  |  |  |       <listitem><simpara>prefilter</simpara></listitem> | 
					
						
							|  |  |  |       <listitem><simpara>postfilter</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |       <listitem><simpara>outputfilter</simpara></listitem> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <listitem><simpara>resource</simpara></listitem> | 
					
						
							|  |  |  |       <listitem><simpara>insert</simpara></listitem> | 
					
						
							|  |  |  |      </itemizedlist> | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      And <literal>name</literal> should be a valid identifier (letters, | 
					
						
							|  |  |  |      numbers, and underscores only). | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Some examples: <literal>function.html_select_date.php</literal>, | 
					
						
							|  |  |  |      <literal>resource.db.php</literal>, | 
					
						
							|  |  |  |      <literal>modifier.spacify.php</literal>. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      The plugin functions inside the plugin files must be named as follows: | 
					
						
							|  |  |  |      <blockquote> | 
					
						
							|  |  |  |       <para> | 
					
						
							|  |  |  |        <function>smarty_<replaceable>type</replaceable>_<replaceable>name</replaceable></function> | 
					
						
							|  |  |  |       </para> | 
					
						
							|  |  |  |      </blockquote> | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      The meanings of <literal>type</literal> and <literal>name</literal> are | 
					
						
							|  |  |  |      the same as before. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Smarty will output appropriate error messages if the plugin file it | 
					
						
							|  |  |  |      needs is not found, or if the file or the plugin function are named | 
					
						
							|  |  |  |      improperly. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <sect1 id="plugins.writing"> | 
					
						
							|  |  |  |     <title>Writing Plugins</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Plugins can be either loaded by Smarty automatically from the | 
					
						
							|  |  |  |      filesystem or they can be registered at runtime via one of the | 
					
						
							|  |  |  |      register_* API functions. They can also be unregistered by using | 
					
						
							|  |  |  |      unregister_* API functions. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      For the plugins that are registered at runtime, the name of the plugin | 
					
						
							|  |  |  |      function(s) does not have to follow the naming convention. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      If a plugin depends on some functionality provided by another plugin | 
					
						
							|  |  |  |      (as is the case with some plugins bundled with Smarty), then the proper | 
					
						
							|  |  |  |      way to load the needed plugin is this: | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <programlisting> | 
					
						
							|  |  |  | require_once SMARTY_DIR . 'plugins/function.html_options.php';</programlisting> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      As a general rule, Smarty object is always passed to the plugins as the last | 
					
						
							|  |  |  |      parameter (except for modifiers). | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    <sect1 id="plugins.functions"><title>Template Functions</title> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>void <function>smarty_function_<replaceable>name</replaceable></function></funcdef> | 
					
						
							|  |  |  |       <paramdef>array <parameter>$params</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      All attributes passed to template functions from the template are | 
					
						
							|  |  |  |      contained in the <parameter>$params</parameter> as an associative | 
					
						
							|  |  |  |      array. Either access those values directly, e.g. | 
					
						
							|  |  |  |      <varname>$params['start']</varname> or use | 
					
						
							|  |  |  |      <varname>extract($params)</varname> to import them into the symbol | 
					
						
							|  |  |  |      table. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2003-02-02 08:07:57 +00:00
										 |  |  | 	 The output (return value) of the function will be substituted in place of the | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |      function tag in the template (<function>fetch</function> function, for | 
					
						
							|  |  |  |      example). Alternatively, the function can simply perform some other | 
					
						
							|  |  |  |      task without any output (<function>assign</function> function). | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      If the function needs to assign some variables to the template or use | 
					
						
							|  |  |  |      some other Smarty-provided functionality, it can use the supplied | 
					
						
							|  |  |  |      <parameter>$smarty</parameter> object to do so. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <para> | 
					
						
							|  |  |  |      See also: | 
					
						
							|  |  |  |      <link linkend="api.register.function">register_function()</link>, | 
					
						
							|  |  |  |      <link linkend="api.unregister.function">unregister_function()</link>. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      <example> | 
					
						
							|  |  |  |       <title>function plugin with output</title> | 
					
						
							|  |  |  |       <programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |  * File:     function.eightball.php | 
					
						
							|  |  |  |  * Type:     function | 
					
						
							|  |  |  |  * Name:     eightball | 
					
						
							|  |  |  |  * Purpose:  outputs a random magic answer | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | function smarty_function_eightball($params, &$smarty) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     $answers = array('Yes', | 
					
						
							|  |  |  |                      'No', | 
					
						
							|  |  |  |                      'No way', | 
					
						
							| 
									
										
										
										
											2002-04-24 14:46:02 +00:00
										 |  |  |                      'Outlook not so good', | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |                      'Ask again soon', | 
					
						
							|  |  |  |                      'Maybe in your reality'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $result = array_rand($answers); | 
					
						
							| 
									
										
										
										
											2003-02-02 08:07:57 +00:00
										 |  |  |     return $answers[$result]; | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | ?></programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      </example> | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      which can be used in the template as: | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <programlisting> | 
					
						
							|  |  |  | Question: Will we ever have time travel? | 
					
						
							|  |  |  | Answer: {eightball}.</programlisting> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      <example> | 
					
						
							|  |  |  |       <title>function plugin without output</title> | 
					
						
							|  |  |  |       <programlisting> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |  * File:     function.assign.php | 
					
						
							|  |  |  |  * Type:     function | 
					
						
							|  |  |  |  * Name:     assign | 
					
						
							|  |  |  |  * Purpose:  assign a value to a template variable | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | function smarty_function_assign($params, &$smarty) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     extract($params); | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     if (empty($var)) { | 
					
						
							|  |  |  |         $smarty->trigger_error("assign: missing 'var' parameter"); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if (!in_array('value', array_keys($params))) { | 
					
						
							|  |  |  |         $smarty->trigger_error("assign: missing 'value' parameter"); | 
					
						
							|  |  |  |         return; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     $smarty->assign($var, $value); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |      </example> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    </sect1> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    <sect1 id="plugins.modifiers"><title>Modifiers</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      Modifiers are little functions that are applied to a variable in the | 
					
						
							|  |  |  |      template before it is displayed or used in some other context. | 
					
						
							|  |  |  |      Modifiers can be chained together. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |       <funcdef>mixed <function>smarty_modifier_<replaceable>name</replaceable></function></funcdef> | 
					
						
							|  |  |  |       <paramdef>mixed <parameter>$value</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>[mixed <parameter>$param1</parameter>, ...]</paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      The first parameter to the modifier plugin is the value on which | 
					
						
							|  |  |  |      the modifier is supposed to operate. The rest of the parameters can be | 
					
						
							|  |  |  |      optional, depending on what kind of operation is supposed to be | 
					
						
							|  |  |  |      performed. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      The modifier has to return the result of its processing. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      See also | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      <link linkend="api.register.modifier">register_modifier()</link>, | 
					
						
							|  |  |  |      <link linkend="api.unregister.modifier">unregister_modifier()</link>. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      <title>simple modifier plugin</title> | 
					
						
							|  |  |  |      <para> | 
					
						
							|  |  |  |       This plugin basically aliases one of the built-in PHP functions. It | 
					
						
							|  |  |  |       does not have any additional parameters. | 
					
						
							|  |  |  |      </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  * File:     modifier.capitalize.php | 
					
						
							|  |  |  |  * Type:     modifier | 
					
						
							|  |  |  |  * Name:     capitalize | 
					
						
							|  |  |  |  * Purpose:  capitalize words in the string | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | function smarty_modifier_capitalize($string) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     return ucwords($string); | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |     <para></para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>more complex modifier plugin</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  * File:     modifier.truncate.php | 
					
						
							|  |  |  |  * Type:     modifier | 
					
						
							|  |  |  |  * Name:     truncate | 
					
						
							|  |  |  |  * Purpose:  Truncate a string to a certain length if necessary, | 
					
						
							|  |  |  |  *           optionally splitting in the middle of a word, and  | 
					
						
							|  |  |  |  *           appending the $etc string. | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function smarty_modifier_truncate($string, $length = 80, $etc = '...', | 
					
						
							|  |  |  |                                   $break_words = false) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     if ($length == 0) | 
					
						
							|  |  |  |         return ''; | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     if (strlen($string) > $length) { | 
					
						
							|  |  |  |         $length -= strlen($etc); | 
					
						
							|  |  |  |         $fragment = substr($string, 0, $length+1); | 
					
						
							|  |  |  |         if ($break_words) | 
					
						
							|  |  |  |             $fragment = substr($fragment, 0, -1); | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |             $fragment = preg_replace('/\s+(\S+)?$/', '', $fragment); | 
					
						
							|  |  |  |         return $fragment.$etc; | 
					
						
							|  |  |  |     } else | 
					
						
							|  |  |  |         return $string; | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | } | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |    <sect1 id="plugins.block.functions"><title>Block Functions</title> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							| 
									
										
										
										
											2002-11-21 14:17:41 +00:00
										 |  |  |       <funcdef>void <function>smarty_block_<replaceable>name</replaceable></function></funcdef> | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |       <paramdef>array <parameter>$params</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>mixed <parameter>$content</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Block functions are functions of the form: {func} .. {/func}. In other | 
					
						
							|  |  |  |      words, they enclose a template block and operate on the contents of | 
					
						
							|  |  |  |      this block. Block functions take precedence over custom functions of | 
					
						
							|  |  |  |      the same name, that is, you cannot have both custom function {func} and | 
					
						
							|  |  |  |      block function {func} .. {/func}. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Your function implementation is called twice by Smarty: | 
					
						
							|  |  |  |      once for the opening tag, and once for the closing tag. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Only the opening tag of the block function may have attributes. All | 
					
						
							|  |  |  |      attributes passed to template functions from the template are contained | 
					
						
							|  |  |  |      in the <parameter>$params</parameter> as an associative array. You can | 
					
						
							|  |  |  |      either access those values directly, e.g. | 
					
						
							|  |  |  |      <varname>$params['start']</varname> or use | 
					
						
							|  |  |  |      <varname>extract($params)</varname> to import them into the symbol | 
					
						
							|  |  |  |      table. The opening tag attributes are also accessible to your function | 
					
						
							|  |  |  |      when processing the closing tag. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      The value of <parameter>$content</parameter> variable depends on | 
					
						
							|  |  |  |      whether your function is called for the opening or closing tag. In case | 
					
						
							|  |  |  |      of the opening tag, it will be <literal>null</literal>, and in case of | 
					
						
							|  |  |  |      the closing tag it will be the contents of the template block. | 
					
						
							|  |  |  |      Note that the template block will have already been processed by | 
					
						
							|  |  |  |      Smarty, so all you will receive is the template output, not the | 
					
						
							|  |  |  |      template source. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      If you have nested block functions, it's possible to find out what the | 
					
						
							|  |  |  |      parent block function is by accessing | 
					
						
							|  |  |  |      <varname>$smarty->_tag_stack</varname> variable. Just do a var_dump() | 
					
						
							|  |  |  |      on it and the structure should be apparent. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      See also: | 
					
						
							|  |  |  |      <link linkend="api.register.block">register_block()</link>, | 
					
						
							|  |  |  |      <link linkend="api.unregister.block">unregister_block()</link>. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>block function</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  * File:     block.translate.php | 
					
						
							|  |  |  |  * Type:     block | 
					
						
							|  |  |  |  * Name:     translate | 
					
						
							|  |  |  |  * Purpose:  translate a block of text | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-04-30 13:57:14 +00:00
										 |  |  | function smarty_block_translate($params, $content, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     if ($content) { | 
					
						
							|  |  |  |         $lang = $params['lang']; | 
					
						
							|  |  |  |         // do some intelligent translation thing here with $content | 
					
						
							|  |  |  |         echo $translation; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }</programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    <sect1 id="plugins.compiler.functions"><title>Compiler Functions</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      Compiler functions are called only during compilation of the template. | 
					
						
							|  |  |  |      They are useful for injecting PHP code or time-sensitive static | 
					
						
							|  |  |  |      content into the template. If there is both a compiler function and a | 
					
						
							|  |  |  |      custom function registered under the same name, the compiler function | 
					
						
							|  |  |  |      has precedence. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |       <funcdef>mixed <function>smarty_compiler_<replaceable>name</replaceable></function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$tag_arg</parameter></paramdef> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      The compiler function is passed two parameters: the tag argument | 
					
						
							|  |  |  |      string - basically, everything from the function name until the ending | 
					
						
							|  |  |  |      delimiter, and the Smarty object. It's supposed to return the PHP code | 
					
						
							|  |  |  |      to be injected into the compiled template. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      See also | 
					
						
							|  |  |  |      <link linkend="api.register.compiler.function">register_compiler_function()</link>, | 
					
						
							|  |  |  |      <link linkend="api.unregister.compiler.function">unregister_compiler_function()</link>. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      <title>simple compiler function</title> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  * File:     compiler.tplheader.php | 
					
						
							|  |  |  |  * Type:     compiler | 
					
						
							|  |  |  |  * Name:     tplheader | 
					
						
							|  |  |  |  * Purpose:  Output header containing the source file name and | 
					
						
							|  |  |  |  *           the time it was compiled. | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | function smarty_compiler_tplheader($tag_arg, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';"; | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | ?></programlisting> | 
					
						
							|  |  |  |      <para> | 
					
						
							|  |  |  |       This function can be called from the template as: | 
					
						
							|  |  |  |      </para> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | {* this function gets executed at compile time only *} | 
					
						
							|  |  |  | {tplheader}</programlisting> | 
					
						
							|  |  |  |      <para> | 
					
						
							|  |  |  |       The resulting PHP code in the compiled template would be something like this: | 
					
						
							|  |  |  |      </para> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <php | 
					
						
							|  |  |  | echo 'index.tpl compiled at 2002-02-20 20:02'; | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    <sect1 id="plugins.prefilters.postfilters"> | 
					
						
							|  |  |  |     <title>Prefilters/Postfilters</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Prefilter and postfilter plugins are very similar in concept; where | 
					
						
							|  |  |  |      they differ is in the execution -- more precisely the time of their | 
					
						
							|  |  |  |      execution. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>string <function>smarty_prefilter_<replaceable>name</replaceable></function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$source</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Prefilters are used to process the source of the template immediately | 
					
						
							|  |  |  |      before compilation. The first parameter to the prefilter function is | 
					
						
							|  |  |  |      the template source, possibly modified by some other prefilters. The | 
					
						
							|  |  |  |      plugin is supposed to return the modified source.  Note that this | 
					
						
							|  |  |  |      source is not saved anywhere, it is only used for compilation. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>string <function>smarty_postfilter_<replaceable>name</replaceable></function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$compiled</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Postfilters are used to process the compiled output of the template | 
					
						
							|  |  |  |      (the PHP code) immediately after the compilation is done but before the | 
					
						
							|  |  |  |      compiled template is saved to the filesystem. The first parameter to | 
					
						
							|  |  |  |      the postfilter function is the compiled template code, possibly | 
					
						
							|  |  |  |      modified by other postfilters. The plugin is supposed to return the | 
					
						
							|  |  |  |      modified version of this code. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>prefilter plugin</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  * File:     prefilter.pre01.php | 
					
						
							|  |  |  |  * Type:     prefilter | 
					
						
							|  |  |  |  * Name:     pre01 | 
					
						
							|  |  |  |  * Purpose:  Convert html tags to be lowercase. | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  |  function smarty_prefilter_pre01($source, &$smarty) | 
					
						
							|  |  |  |  { | 
					
						
							|  |  |  |      return preg_replace('!<(\w+)[^>]+>!e', 'strtolower("$1")', $source); | 
					
						
							|  |  |  |  } | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |     <para></para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>postfilter plugin</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  * File:     postfilter.post01.php | 
					
						
							|  |  |  |  * Type:     postfilter | 
					
						
							|  |  |  |  * Name:     post01 | 
					
						
							|  |  |  |  * Purpose:  Output code that lists all current template vars. | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  |  function smarty_postfilter_post01($compiled, &$smarty) | 
					
						
							|  |  |  |  { | 
					
						
							|  |  |  |      $compiled = "<pre>\n<?php print_r(\$this->get_template_vars()); ?>\n</pre>" . $compiled; | 
					
						
							|  |  |  |      return $compiled; | 
					
						
							|  |  |  |  } | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-04-29 21:13:40 +00:00
										 |  |  |    <sect1 id="plugins.outputfilters"><title>Output Filters</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Output filter plugins operate on a template's output, after the | 
					
						
							|  |  |  |      template is loaded and executed, but before the output is displayed. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>string <function>smarty_outputfilter_<replaceable>name</replaceable></function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$template_output</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      The first parameter to the output filter function is the template | 
					
						
							|  |  |  |      output that needs to be processed, and the second parameter is the | 
					
						
							|  |  |  |      instance of Smarty invoking the plugin. The plugin is supposed to do | 
					
						
							|  |  |  |      the processing and return the results. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>output filter plugin</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  * File:     outputfilter.protect_email.php | 
					
						
							|  |  |  |  * Type:     outputfilter | 
					
						
							|  |  |  |  * Name:     protect_email | 
					
						
							|  |  |  |  * Purpose:  Converts @ sign in email addresses to %40 as  | 
					
						
							|  |  |  |  *           a simple protection against spambots | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  |  function smarty_outputfilter_protect_email($output, &$smarty) | 
					
						
							|  |  |  |  { | 
					
						
							|  |  |  |      return preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!', | 
					
						
							|  |  |  |                          '$1%40$2', $output); | 
					
						
							|  |  |  |  } | 
					
						
							|  |  |  |      </programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    <sect1 id="plugins.resources"><title>Resources</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Resource plugins are meant as a generic way of providing template | 
					
						
							|  |  |  |      sources or PHP script components to Smarty. Some examples of resources: | 
					
						
							|  |  |  |      databases, LDAP, shared memory, sockets, and so on. | 
					
						
							|  |  |  |     </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <para> | 
					
						
							|  |  |  |      There are a total of 4 functions that need to be registered for each | 
					
						
							|  |  |  |      type of resource. Every function will receive the requested resource as | 
					
						
							|  |  |  |      the first parameter and the Smarty object as the last parameter. The | 
					
						
							|  |  |  |      rest of parameters depend on the function. | 
					
						
							|  |  |  |     </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_source</function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$rsrc_name</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>&$source</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_timestamp</function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$rsrc_name</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>int <parameter>&$timestamp</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_secure</function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$rsrc_name</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>bool <function>smarty_resource_<replaceable>name</replaceable>_trusted</function></funcdef> | 
					
						
							|  |  |  |       <paramdef>string <parameter>$rsrc_name</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <para> | 
					
						
							|  |  |  |      The first function is supposed to retrieve the resource. Its second | 
					
						
							|  |  |  |      parameter is a variable passed by reference where the result should be | 
					
						
							|  |  |  |      stored. The function is supposed to return <literal>true</literal> if | 
					
						
							|  |  |  |      it was able to successfully retrieve the resource and | 
					
						
							|  |  |  |      <literal>false</literal> otherwise. | 
					
						
							|  |  |  |     </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <para> | 
					
						
							|  |  |  |      The second function is supposed to retrieve the last modification time | 
					
						
							|  |  |  |      of the requested resource (as a UNIX timestamp). The second parameter | 
					
						
							|  |  |  |      is a variable passed by reference where the timestamp should be stored. | 
					
						
							|  |  |  |      The function is supposed to return <literal>true</literal> if the | 
					
						
							|  |  |  |      timestamp could be succesfully determined, and <literal>false</literal> | 
					
						
							|  |  |  |      otherwise. | 
					
						
							|  |  |  |     </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <para> | 
					
						
							|  |  |  |      The third function is supposed to return <literal>true</literal> or | 
					
						
							|  |  |  |      <literal>false</literal>, depending on whether the requested resource | 
					
						
							|  |  |  |      is secure or not. This function is used only for template resources but | 
					
						
							|  |  |  |      should still be defined. | 
					
						
							|  |  |  |     </para> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     <para> | 
					
						
							|  |  |  |      The fourth function is supposed to return <literal>true</literal> or | 
					
						
							|  |  |  |      <literal>false</literal>, depending on whether the requested resource | 
					
						
							|  |  |  |      is trusted or not. This function is used for only for PHP script | 
					
						
							|  |  |  |      components requested by <command>include_php</command> tag or | 
					
						
							|  |  |  |      <command>insert</command> tag with <structfield>src</structfield> | 
					
						
							|  |  |  |      attribute. However, it should still be defined even for template | 
					
						
							|  |  |  |      resources. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      See also | 
					
						
							|  |  |  |      <link linkend="api.register.resource">register_resource()</link>, | 
					
						
							|  |  |  |      <link linkend="api.unregister.resource">unregister_resource()</link>. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>resource plugin</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * -------------------------------------------------------------  | 
					
						
							|  |  |  |  * File:     resource.db.php | 
					
						
							|  |  |  |  * Type:     resource | 
					
						
							|  |  |  |  * Name:     db | 
					
						
							|  |  |  |  * Purpose:  Fetches templates from a database | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     // do database call here to fetch your template, | 
					
						
							|  |  |  |     // populating $tpl_source | 
					
						
							|  |  |  |     $sql = new SQL; | 
					
						
							|  |  |  |     $sql->query("select tpl_source | 
					
						
							|  |  |  |                    from my_table | 
					
						
							|  |  |  |                   where tpl_name='$tpl_name'"); | 
					
						
							|  |  |  |     if ($sql->num_rows) { | 
					
						
							|  |  |  |         $tpl_source = $sql->record['tpl_source']; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     // do database call here to populate $tpl_timestamp. | 
					
						
							|  |  |  |     $sql = new SQL; | 
					
						
							|  |  |  |     $sql->query("select tpl_timestamp | 
					
						
							|  |  |  |                    from my_table | 
					
						
							|  |  |  |                   where tpl_name='$tpl_name'"); | 
					
						
							|  |  |  |     if ($sql->num_rows) { | 
					
						
							|  |  |  |         $tpl_timestamp = $sql->record['tpl_timestamp']; | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | function smarty_resource_db_secure($tpl_name, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     // assume all templates are secure | 
					
						
							|  |  |  |     return true; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | function smarty_resource_db_trusted($tpl_name, &$smarty) | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | { | 
					
						
							|  |  |  |     // not used for templates | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |    <sect1 id="plugins.inserts"><title>Inserts</title> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      Insert plugins are used to implement functions that are invoked by | 
					
						
							| 
									
										
										
										
											2002-03-01 20:50:49 +00:00
										 |  |  |      <link linkend="language.function.insert"><command>insert</command></link> | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |      tags in the template. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <funcsynopsis> | 
					
						
							|  |  |  |      <funcprototype> | 
					
						
							|  |  |  |       <funcdef>string <function>smarty_insert_<replaceable>name</replaceable></function></funcdef> | 
					
						
							|  |  |  |       <paramdef>array <parameter>$params</parameter></paramdef> | 
					
						
							|  |  |  |       <paramdef>object <parameter>&$smarty</parameter></paramdef> | 
					
						
							|  |  |  |      </funcprototype> | 
					
						
							|  |  |  |     </funcsynopsis> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      The first parameter to the function is an associative array of | 
					
						
							|  |  |  |      attributes passed to the insert. Either access those values directly, | 
					
						
							|  |  |  |      e.g. <varname>$params['start']</varname> or use | 
					
						
							|  |  |  |      <varname>extract($params)</varname> to import them into the symbol | 
					
						
							|  |  |  |      table. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <para> | 
					
						
							|  |  |  |      The insert function is supposed to return the result which will be | 
					
						
							|  |  |  |      substituted in place of the <command>insert</command> tag in the | 
					
						
							|  |  |  |      template. | 
					
						
							|  |  |  |     </para> | 
					
						
							|  |  |  |     <example> | 
					
						
							|  |  |  |      <title>insert plugin</title> | 
					
						
							|  |  |  |      <programlisting> | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | /* | 
					
						
							|  |  |  |  * Smarty plugin | 
					
						
							|  |  |  |  * -------------------------------------------------------------  | 
					
						
							|  |  |  |  * File:     insert.time.php | 
					
						
							|  |  |  |  * Type:     time | 
					
						
							|  |  |  |  * Name:     time | 
					
						
							|  |  |  |  * Purpose:  Inserts current date/time according to format | 
					
						
							|  |  |  |  * ------------------------------------------------------------- | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function smarty_insert_time($params, &$smarty) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     if (empty($params['format'])) { | 
					
						
							|  |  |  |         $smarty->trigger_error("insert time: missing 'format' parameter"); | 
					
						
							|  |  |  |         return; | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-28 22:41:41 +00:00
										 |  |  |     $datetime = strftime($params['format']); | 
					
						
							|  |  |  |     return $datetime; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ?></programlisting> | 
					
						
							|  |  |  |     </example> | 
					
						
							|  |  |  |    </sect1> | 
					
						
							|  |  |  |   </chapter> | 
					
						
							| 
									
										
										
										
											2002-02-26 21:13:54 +00:00
										 |  |  |  </part> |