Smarty - PHP模板引擎

Monte Ohrt <monte at ohrt dot com>

Uwe Tews <uwe dot tews at googlemail dot com>

jake <jake at speedphp dot com>

2012-06-30


Table of Contents

序言
I. 开始
1. Smarty是什么?
2. 安装
环境需求
基础安装
进阶安装
II. 模板设计师篇
3. 基本语法
注释
变量
函数
属性
双引号中嵌入变量
数学计算
避免Smarty解析
4. 变量
从PHP赋值的变量
数组赋值
数组下标
对象
变量作用范围
从配置文件获取的变量
{$smarty} 保留变量
页面请求变量
{$smarty.now}
{$smarty.const}
{$smarty.capture}
{$smarty.config}
{$smarty.section}
{$smarty.template}
{$smarty.template_object}
{$smarty.current_dir}
{$smarty.version}
{$smarty.block.child}
{$smarty.block.parent}
{$smarty.ldelim}, {$smarty.rdelim}
5. 变量修饰器
capitalize
cat
count_characters
count_paragraphs
count_sentences
count_words
date_format
default
escape
from_charset
indent
lower
nl2br
regex_replace
replace
spacify
string_format
strip
strip_tags
to_charset
truncate
unescape
upper
wordwrap
6. 复合修饰器
7. 内置函数
{$var=...}
{append}
{assign}
{block}
{call}
{capture}
{config_load}
{debug}
{extends}
{for}
{foreach},{foreachelse}
@index
@iteration
@first
@last
@show
@total
{break}
{continue}
{function}
{if},{elseif},{else}
{include}
{include_php}
{insert}
{ldelim},{rdelim}
{literal}
{nocache}
{php}
{section},{sectionelse}
.index
.index_prev
.index_next
.iteration
.first
.last
.rownum
.loop
.show
.total
{setfilter}
{strip}
{while}
8. 自定义函数
{counter}
{cycle}
{eval}
{fetch}
{html_checkboxes}
{html_image}
{html_options}
{html_radios}
{html_select_date}
{html_select_time}
{html_table}
{mailto}
{math}
{textformat}
9. 配置文件
10. 调试控制台
III. 程序开发者篇
11. 字符集编码
字符集编码
12. 常量
SMARTY_DIR
13. Smarty成员变量
$allow_php_templates
$auto_literal
$autoload_filters
$cache_dir
$cache_id
$cache_lifetime
$cache_locking
$cache_modified_check
$caching
$caching_type
$compile_check
$compile_dir
$compile_id
$compile_locking
$compiler_class
$config_booleanize
$config_dir
$config_overwrite
$config_read_hidden
$debug_tpl
$debugging
$debugging_ctrl
$default_config_type
$default_modifiers
$default_resource_type
$default_config_handler_func
$default_template_handler_func
$direct_access_security
$error_reporting
$escape_html
$force_cache
$force_compile
$left_delimiter
$locking_timeout
$merge_compiled_includes
$php_handling
$plugins_dir
$right_delimiter
$smarty_debug_id
$template_dir
$trusted_dir
$use_include_path
$use_sub_dirs
14. Smarty成员方法
addConfigDir() — 增加一个配置文件目录
addPluginsDir() — 增加一个插件目录
addTemplateDir() — 增加一个模板文件目录
append() — 把值追加到数组。
appendByRef() — 引用追加
assign() — 赋值
assignByRef() — 引用赋值
clearAllAssign() — 清除全部赋值
clearAllCache() — 清除全部缓存
clearAssign() — 清除赋值
clearCache() — 清除缓存
clearCompiledTemplate() — 清除模板编译文件
clearConfig() — 清除配置
compileAllConfig() — 编译全部配置文件
compileAllTemplates() — 编译全部模板
configLoad() — 载入预配置的变量
createData() — 创建数据对象
createTemplate() — 创建模板对象
disableSecurity() — 关闭安全检查
display() — 显示
enableSecurity() — 开启安全检查
fetch() — 取得输出内容
getCacheDir() — 取得缓存目录
getCompileDir() — 取得编译目录
getConfigDir() — 取得配置文件目录
getConfigVars() — 取得预配置变量
getPluginsDir() — 取得插件目录
getRegisteredObject() — 获取已注册对象
getTags() — 取得模板标签
getTemplateDir() — 取得模板目录
getTemplateVars() — 取得变量值
isCached() — 检查模板是否已经缓存
loadFilter() — 载入过滤插件
Smarty::muteExpectedErrors() — 忽略脚本警告信息
registerCacheResource() — 注册缓存资源
registerClass() — 注册类
registerDefaultPluginHandler() — 注册默认插件处理器
registerFilter() — 注册过滤器
registerPlugin() — 注册插件
registerObject() — 注册对象
registerResource() — 注册资源
setCacheDir() — 设置缓存目录
setCompileDir() — 设置编译目录
setConfigDir() — 设置配置目录
setPluginsDir() — 设置插件目录
setTemplateDir() — 设置模板目录
templateExists() — 检查模板是否存在
unregisterCacheResource() — 注销缓存资源
unregisterFilter() — 注销过滤器
unregisterPlugin — 注销插件
unregisterObject() — 注销对象
unregisterResource() — 注销资源
testInstall() — 测试Smarty安装
15. 缓存
配置缓存时间
单页多个缓存
缓存组
控制输出缓存
模板区域缓存控制
标签的缓存控制
变量的缓存控制
插件的缓存控制
自定义缓存实现
16. 资源
文件资源
$template_dir目录
特定的$template_dir
任意目录的模板
Windows文件路径
字符串资源
数据流资源
扩展模板资源
自定义模板资源
17. 高级特性
安全
修改模板设置
模板继承
数据流
对象
静态类
前置过滤器
后置过滤器
输出过滤器
18. 以插件扩展Smarty
插件如何工作
命名规则
编写插件
模板函数
修饰器
块函数
编译函数
前置/后置过滤器
输出过滤器
资源插件
插入插件
19. SmartyBC - 向前兼容的类库
SmartyBC 类
IV. 附录
20. 疑难解答
Smarty/PHP 错误
21. 技巧
空变量的处理
默认变量处理
传递标题到头部模板
日期时间
WAP/WML页面
组件化模板
混淆电子邮件地址
22. 资料
23. BUGS

List of Examples

2.1. 载入Smarty库文件
2.2. 手动指定 SMARTY_DIR 常量
2.3. 用绝对路径引用库文件
2.4. 将库文件路径增加到php.ini 文件
2.5. 通过函数ini_set() 来设置include path
2.6. 目录文件结构
2.7. 设置目录的读写权限
2.8. /web/www.example.com/guestbook/templates/index.tpl
2.9. 修改 /web/www.example.com/docs/guestbook/index.php
2.10. /php/includes/guestbook/setup.php
2.11. /web/www.example.com/guestbook/htdocs/index.php
3.1. 注释例子
3.2. 变量
3.3. 函数语法
3.4. 函数属性语法
3.5. 例子
3.6. 例子
3.7. 数学计算例子
3.8. 使用自动忽略解析的特性
3.9. 改变定界符的例子
4.1. 变量例子
4.2. 变量赋值
4.3. 数组变量
4.4. 使用数组下标
4.5. 使用对象
4.6. 变量范围的例子
4.7. 配置变量
4.8. 显示页面请求变量
5.1. 修饰器例子
5.2. capitalize
5.3. cat
5.4. count_characters
5.5. count_paragraphs
5.6. count_sentences
5.7. count_words
5.8. date_format
5.9. default
5.10. escape
5.11. escape的另一个例子
5.12. indent
5.13. lower
5.14. nl2br
5.15. regex_replace
5.16. replace
5.17. spacify
5.18. string_format
5.19. strip
5.20. strip_tags
5.21. truncate
5.22. escape
5.23. upper
5.24. wordwrap
6.1. 复合修饰器
7.1. 简单赋值
7.2. 数学运算赋值
7.3. 对数组元素赋值
7.4. 对多维数组元素赋值
7.5. 附加到数组
7.6. 赋值的作用范围
7.7. {append}
7.8. {assign}
7.9. {assign} 使用nocache属性
7.10. {assign} 进行数学运算
7.11. {assign} 在调用的模板内的作用范围
7.12. {assign} 作用范围例子
7.13. {assign} 赋值一个全局变量
7.14. 从PHP脚本中获取{assign} 的变量
7.15. 简单的 {block} 例子
7.16. 前面附加 {block} 例子
7.17. 后面附加 {block} 例子
7.18. {$smarty.block.child} 例子
7.19. {$smarty.block.parent} 例子
7.20. 调用一个递归菜单的例子
7.21. {capture}使用name属性
7.22. {capture} 捕获内容到变量
7.23. {capture} 捕获内容到数组变量
7.24. {config_load}
7.25. {config_load} 载入段落配置变量
7.26. 简单 {extends} 例子
7.27. 简单的{for} 循环
7.28. 使用max 属性
7.29. {forelse}的执行
7.30. 简单的{foreach} 循环
7.31. 使用key变量的例子
7.32. 多维数组通过itemkey来嵌套使用{foreach}
7.33. {foreachelse}的数据库例子
7.34. index 例子
7.35. iteration 例子: is div by
7.36. iteration 例子: is even/odd by
7.37. first例子
7.38. last例子
7.39. show例子
7.40. total例子
7.41. {break} 例子
7.42. {continue} 例子
7.43. 递归菜单 {function} 例子
7.44. {if} 表达式
7.45. {if} 的更多例子
7.46. 简单 {include} 例子
7.47. {include} 传递变量
7.48. {include} 作用范围示例
7.49. {include} 关闭缓存
7.50. {include} 单独的缓存时间
7.51. {include}开启缓存
7.52. {include} 和赋值变量
7.53. {include} 相对路径
7.54. 各种 {include} 资源例子
7.55. {include_php} 函数
7.56. {insert} 函数
7.57. {ldelim}, {rdelim}
7.58. 再一个 Javascript 例子
7.59. {literal} 标签
7.60. 阻止模板区域缓存
7.61. {php}标签的使用
7.62. {php}标签中使用全局变量来赋值变量
7.63. 简单的{section}例子
7.64. {section}不使用赋值数组
7.65. 给{section}设置名称
7.66. {section}中使用关联数组
7.67. {section}的loop属性的演示例子
7.68. {section}嵌套
7.69. {sectionelse}的数据库例子
7.70. {section} index 属性
7.71. index, index_nextindex_prev 属性
7.72. iteration属性
7.73. {section} 属性 firstlast
7.74. {section} 属性 loop
7.75. show 属性
7.76. total例子
7.77. {setfilter} 标签
7.78. {strip} 标签
7.79. {while} 循环
8.1. {counter}
8.2. {cycle}
8.3. {eval}
8.4. 另一个{eval}例子
8.5. {fetch} 例子
8.6. {html_checkboxes}
8.7. 数据库例子(例如 PEAR 或 ADODB):
8.8. {html_image} 例子
8.9. 使用options属性
8.10. 分开赋值valuesouptut
8.11. 数据库例子(如 ADODB 或 PEAR)
8.12. <optgroup> 下拉组
8.13. {html_radios}第一个例子
8.14. {html_radios}第二个例子
8.15. {html_radios} 数据库例子(如 PEAR 或 ADODB):
8.16. {html_select_date}
8.17. {html_select_date} 第二个地理
8.18. {html_select_time}
8.19. {html_table}
8.20. {mailto}例子和其输出的结果
8.21. {math}
8.22. {textformat}
9.1. 配置文件语法示例
11.1. 设置字符集编码
12.1. SMARTY_DIR
13.1. 虚拟主机环境的$compile_id
13.2. #变量#数组
13.3. 在localhost上的$debugging_ctrl
13.4. $default_config_handler_func
13.5. $default_template_handler_func
14.1. addConfigDir()
14.2. addPluginsDir()
14.3. addTemplateDir()
14.4. append()
14.5. appendByRef()
14.6. assign()
14.7. assignByRef()
14.8. clearAllAssign()
14.9. clearAllCache
14.10. clearAssign()
14.11. clearCache()
14.12. clearCompiledTemplate()
14.13. clearConfig()
14.14. compileAllConfig()
14.15. compileAllTemplates()
14.16. configLoad()
14.17. createData()
14.18. createTemplate()
14.19. display()
14.20. 其他 display() 的示例
14.21. fetch()
14.22. 用fetch()来发邮件
14.23. getCacheDir()
14.24. getCompileDir()
14.25. getConfigDir()
14.26. getConfigVars()
14.27. getPluginsDir()
14.28. getRegisteredObject()
14.29. getTags()
14.30. getTemplateDir()
14.31. getTemplateVars
14.32. isCached()
14.33. isCached()用于多缓存的模板
14.34. 载入过滤插件
14.35. registerCacheResource()
14.36. 注册类
14.37. 注册带命名空间的类
14.38. 默认插件处理器例子
14.39. 注册函数
14.40. 注册块函数
14.41. 注册修饰器
14.42. registerResource()
14.43. setCacheDir()
14.44. setCompileDir()
14.45. setConfigDir()
14.46. setPluginsDir()
14.47. setTemplateDir()
14.48. templateExists()
14.49. unregisterCacheResource()
14.50. 注销函数
14.51. unregisterResource()
14.52. testInstall()
15.1. 开启缓存
15.2. 为每个缓存设置$cache_lifetime
15.3. 关闭 $compile_check
15.4. 使用 isCached()
15.5. 删除缓存
15.6. display()的参数作为$cache_id
15.7. 给 isCached() 传递一个 cache_id
15.8. 删除特定$cache_id的缓存
15.9. $cache_id 组
15.10. 使模板的一块区域不进行缓存
15.11. 让标签内容不进行缓存
15.12. 控制变量不缓存
15.13. 控制插件的缓存
15.14. 使模板内一部分区域不缓存
15.15. 通过MySQL实现自定义缓存机制
15.16. 通过Memcache实现自定义缓存机制
16.1. 使用$template_dir
16.2. 特定的$template_dir
16.3. 任意目录的模板
16.4. 使用windows的文件路径
16.5. 使用字符串资源
16.6. 使用编码后的字符串资源
16.7. PHP数据流
16.8. 模板中使用
16.9. 使用模板继承
16.10. U使用自定义资源
17.1. 扩展Smarty_Security 类来设置安全策略
17.2. 通过Smarty_Security类的实例来自定义安全策略
17.3. 开启默认的安全设置
17.4. 创建模板对象并修改Smarty的设置
17.5. 创建模板对象并注册插件
17.6. 模板继承例子
17.7. extends:来进行模板继承
17.8. 数据流变量
17.9. 注册或赋值一个对象
17.10. 静态类存取语法
17.11. 使用前置过滤器
17.12. 使用后置过滤器
17.13. 使用输出过滤器
18.1. 带输出的函数插件
18.2. 不带输出的函数插件
18.3. 一个简单的修饰器
18.4. 更复杂的修饰器
18.5. 块函数
18.6. 一个简单的编译函数
18.7. 前置过滤器
18.8. 后置过滤器
18.9. 输出过滤器
18.10. 资源插件
18.11. 插入插件
19.1. 使用SmartyBC
20.1. Smarty 错误
20.2. PHP 错误提示
20.3. 其他的常见错误
21.1. 当变量为空时显示 &nbsp;
21.2. 给变量赋默认值
21.3. 传递标题到头部模板
21.4. 使用 date_format
21.5. 转换元件的日期为时间戳
21.6. 使用 {insert} 来插入一个WML类型的文件头
21.7. 组件化模板
21.8. 混淆电邮地址的例子