<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0"><tr><th colspan="3" align="center">Smarty - the compiling PHP template engine</th></tr><tr><td width="25%" align="left" valign="bottom"><a href="language.function.foreach.html" accesskey="P">Prev</a></td> <td width="50%" align="center" valign="bottom">Chapter 7. Built-in Functions[第七章.内置函数]</td> <td width="25%" align="right" valign="bottom"><a href="language.function.iflese.html" accesskey="N">Next</a></td></tr></table>
# {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.
<table width="80%" border="0" cellpadding="2" cellspacing="2" class="note"><caption> 提示 </caption> <tr><td>Note<br/>Template functions are defined global. Since the Smarty compiler is a single-pass compiler, The {call} tag must be used to call a template function defined externally from the given template.<br/>模板函数具全局作用域,因为Smarty编译器是单进程的编译器,<a href="language.function.call.html">{call}</a>标签必须用来调用给定模板的外部定义模板函数。</td> </tr></table>
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. 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.
{function}用来在模板中创建函数,可以像调用插件函数一样调用它们。
取代在插件中写表象内容的函数,让模板保持一致性通常是个更好的选择。它也简化了对数据的遍历,例如深度的嵌套菜单。
另外你可以在模板中直接使用{funcname...}函数。
{function}标签必须包含模板函数名的name属性,该name标签名必须能够调用模板函数;
默认变量值应能作为属性传递到模板函数,当模板函数被调用的时候,默认值应能被复写;
在模板函数内部应能使用被调用模板的所有变量值,在模板函数中更改或新建变量的值必须具局部作用域,而且在执行模板函数后这些变量值在被调用模板内部应不可见。
**Attribute: **
| 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 |
**属性: **
| 属性名 | 类型 | 是否必须 | 缺省值 | 描述 |
|-----|-----|-----|-----|-----|
| name | int | yes | *n/a* | 模板函数名 |
| [var...] | [var type] | no | n/a | 由本地传递到模板函数的变量值 |
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="EXAMPLE"><tr><td><div class="EXAMPLE"> <a name="AEN741" id="AEN741"> </a> <b>Example 7.41. Recursive menu {function} example<br/> 例 7-41.递归菜单的{function}</b><strong>例子</strong> <table border="0" bgcolor="#E0E0E0" width="100%"><tr><td><p> {* define the function *}<br/> {function name=menu level=0}<br/> {function menu level=0} {* short-hand *}<br/> <ul class="level{$level}"><br/> {foreach $data as $entry}<br/> {if is_array($entry)}<br/> <li>{$entry@key}</li><br/> {menu data=$entry level=$level+1}<br/> {else}<br/> <li>{$entry}</li><br/> {/if}<br/> {/foreach}<br/> </ul><br/> {/function}</p> <p><br/> {* create an array to demonstrate *}<br/> {$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' => ['item3-3-1','item3-3-2']],'item4']}<br/> {* run the array through the function *}<br/> {menu data=$menu}</p> <p>Will generate the following output<br/> - item1<br/> - item2<br/> - item3<br/> -- item3-1<br/> -- item3-2<br/> -- item3-3<br/> --- item3-3-1<br/> --- item3-3-2<br/> - item4</p> </td> </tr></table><p> 参考<a href="language.function.call.html">{call}</a>。<br/></p> </div></td> </tr></table>
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="language.function.foreach.html" accesskey="P">Prev</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">Home</a></td><td width="33%" align="right" valign="top"><a href="language.function.iflese.html" accesskey="N">Next</a></td></tr><tr><td width="33%" align="left" valign="top">{foreach},{foreachelse}<br/> 遍历</td><td width="34%" align="center" valign="top"><a href="language.builtin.functions.html" accesskey="U">Up</a></td><td width="33%" align="right" valign="top">{if},{elseif},{else}<br/> 条件</td></tr></table>
- Smarty模板编译引擎
- 序
- 译序
- I.开始
- 第一章. 什么是Smarty?
- 第二章. 安装
- II.模板设计者篇
- 第三章.基本语法
- 注释
- 变量
- 函数
- 属性
- 双引号里嵌入变量
- 数学运算
- 忽略Smarty解析
- 第四章.变量
- 从PHP分配的变量
- 从配置文件读取的变量
- 变量范围
- {$smarty}保留变量
- 第五章.变量调节器
- capitalize
- cat
- count_characters
- count_paragraphs
- count_sentences
- count_words
- date_format
- default
- escape
- indent
- lower
- nl2br
- regex_replace
- replace
- spacify
- string_format
- strip
- strip_tags
- truncate
- upper
- wordwrap
- 第六章.组合修改器
- 第七章.内置函数
- {$var=}
- {append}
- {assign}
- {block}
- {call}
- {capture}
- {config_load}
- {debug}
- {extends}
- {for}
- {foreach},{foreachelse}
- @index
- {function}
- {if},{elseif},{else}
- {include}
- {include_php}
- {insert}
- {ldelim},{rdelim}
- {literal}
- {nocache}
- {php}
- {section},{sectionelse}
- .index
- {while}
- 第八章.自定义函数
- {counter}
- {cycle}
- {eval}
- {fetch}
- {html_checkboxes}
- {html_image}
- {html_options}
- {html_radios}
- {html_select_date}
- {html_select_time}
- {html_table}
- {mailto}
- {math}
- {textformat}
- 第九章.配置文件
- 第十章.调试控制台
- III.模板程序员篇
- 第十一章 常量
- SMARTY_DIR
- 第十二章 Smarty类变量
- $template_dir
- 第十三章.Smarty类方法
- append()
- appendByRef()
- assign()
- assignByRef()
- clearAllAssign()
- clearAllCache()
- clearAssign()
- clearCache()
- clearCompiledTpl()
- clearConfig()
- compileAllConfig()
- compileAllTemplates()
- configLoad()
- createData()
- createTemplate()
- disableSecurity()
- display()
- enableSecurity()
- fetch()
- getConfigVars()
- getRegisteredObject()
- getTags()
- getTemplateVars()
- isCached()
- loadFilter()
- registerFilter()
- registerPlugin()
- registerObject()
- registerResource()
- templateExists()
- unregisterFilter()
- unregisterPlugin()
- unregisterObject()
- unregisterResource()
- testInstall()
- 第十四章.缓存
- 建立缓存
- 多重缓存
- 缓存集合
- 控制插件输出的可缓存性
- 第十五章.高级特性
- 安全
- 通过模板更改设置
- 模板继承
- 数据流
- 对象
- 静态类
- 预过滤器
- 后过滤器
- 输出过滤器
- 缓存处理函数
- 资源
- 第十六章.以插件扩展Smarty
- 插件如何工作
- 命名约定
- 编写插件
- 模板函数
- 调节器
- 块函数
- 编译函数
- 预滤器/后滤器
- 输出过滤器
- 资源
- 插入
- Ⅳ.附录
- 第十七章.疑难解答
- Smarty/PHP 错误
- 第十八章.使用技巧和经验
- 空白变量处理
- 默认变量处理
- 传递变量标题给头模板
- 日期
- WAP/WML
- 组件化模板
- 拒绝电子邮件地址
- 第十九章. 相关资源
- 第二十章. 漏洞
- 3.0安装包
- 2.x版本升级至3.x版本的提示
- 3.0.x使用指南
- 翻译人员列表