mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-03 22:01:36 +01:00 
			
		
		
		
	* Add converted docs repo * Set theme jekyll-theme-minimal * Removed BC docs, added TOC * Added TOCs, rewrote most important links in documentation. Linked README to new Github Pages site * some link fixes
		
			
				
	
	
		
			89 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
{function} {#language.function.function}
 | 
						|
==========
 | 
						|
 | 
						|
`{function}` is used to create functions within a template and call them
 | 
						|
just like a plugin function. Instead of writing a plugin that generates
 | 
						|
presentational content, keeping it in the template is often a more
 | 
						|
manageable choice. It also simplifies data traversal, such as deeply
 | 
						|
nested menus.
 | 
						|
 | 
						|
> **Note**
 | 
						|
>
 | 
						|
> Template functions are defined global. Since the Smarty compiler is a
 | 
						|
> single-pass compiler, The [`{call}`](#language.function.call) tag must
 | 
						|
> be used to call a template function defined externally from the given
 | 
						|
> template. Otherwise you can directly use the function as
 | 
						|
> `{funcname ...}` in the template.
 | 
						|
 | 
						|
-   The `{function}` tag must have the `name` attribute which contains
 | 
						|
    the the name of the template function. A tag with this name can be
 | 
						|
    used to call the template function.
 | 
						|
 | 
						|
-   Default values for variables can be passed to the template function
 | 
						|
    as [attributes](#language.syntax.attributes). Like in PHP function
 | 
						|
    declarations you can only use scalar values as default. The default
 | 
						|
    values can be overwritten when the template function is being
 | 
						|
    called.
 | 
						|
 | 
						|
-   You can use all variables from the calling template inside the
 | 
						|
    template function. Changes to variables or new created variables
 | 
						|
    inside the template function have local scope and are not visible
 | 
						|
    inside the calling template after the template function is executed.
 | 
						|
 | 
						|
**Attributes:**
 | 
						|
 | 
						|
   Attribute Name       Type       Required   Default  Description
 | 
						|
  ---------------- -------------- ---------- --------- ---------------------------------------------------------------
 | 
						|
        name           string        Yes       *n/a*   The name of the template function
 | 
						|
    \[var \...\]    \[var type\]      No       *n/a*   default variable value to pass local to the template function
 | 
						|
 | 
						|
> **Note**
 | 
						|
>
 | 
						|
> You can pass any number of parameter to the template function when it
 | 
						|
> is called. The parameter variables must not be declared in the
 | 
						|
> `{funcname ...}` tag unless you what to use default values. Default
 | 
						|
> values must be scalar and can not be variable. Variables must be
 | 
						|
> passed when the template is called.
 | 
						|
 | 
						|
 | 
						|
    {* define the function *}
 | 
						|
    {function name=menu level=0}
 | 
						|
    {function menu level=0}          {* short-hand *}
 | 
						|
      <ul class="level{$level}">
 | 
						|
      {foreach $data as $entry}
 | 
						|
        {if is_array($entry)}
 | 
						|
          <li>{$entry@key}</li>
 | 
						|
          {menu data=$entry level=$level+1}
 | 
						|
        {else}
 | 
						|
          <li>{$entry}</li>
 | 
						|
        {/if}
 | 
						|
      {/foreach}
 | 
						|
      </ul>
 | 
						|
    {/function}
 | 
						|
 | 
						|
    {* create an array to demonstrate *}
 | 
						|
    {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
 | 
						|
    ['item3-3-1','item3-3-2']],'item4']}
 | 
						|
 | 
						|
    {* run the array through the function *}
 | 
						|
    {menu data=$menu}
 | 
						|
 | 
						|
      
 | 
						|
 | 
						|
Will generate the following output
 | 
						|
 | 
						|
 | 
						|
    * item1
 | 
						|
    * item2
 | 
						|
    * item3
 | 
						|
          o item3-1
 | 
						|
          o item3-2
 | 
						|
          o item3-3
 | 
						|
                + item3-3-1
 | 
						|
                + item3-3-2
 | 
						|
    * item4
 | 
						|
 | 
						|
      
 | 
						|
 | 
						|
See also [`{call}`](#language.function.call)
 |