<table cellspacing="0" cellpadding="0" width="100%" summary="Header navigation table" border="0"><tbody><tr><th align="middle" colspan="3">Smarty - the compiling PHP template engine<br/><br/> Smarty - PHP 模板编译引擎</th></tr><tr><td valign="bottom" align="left" width="25%"><a accesskey="P" href="preface.html">Prev</a></td> <td valign="bottom" align="middle" width="50%"/> <td valign="bottom" align="right" width="25%"><a accesskey="N" href="getting.started.html">Next</a></td></tr></tbody></table>
# Preface to Translation
译序
一、声明
本Smarty3中文手册是由原php中文社区的smarty2中文手册基础上改进而来。虽然Smarty3代码已全部转为面向对象语言,但整体功能大部份并没有因此改变,鉴于此,本手册保留了原Smarty2中文手册的目录结构、页面排版及大部份层叠样式表(css)等,当然,里面也有翻译人手有限--只有一人的因素。因此,初乍看本手册与原2手册非常相像。因为,本手册保留原2手册大部份翻译文字,因此,为尊重翻译成果起见,在24章的翻译列表里还保留2手册的全部翻译人员名单。
本手册除了内容有所改变以外,在手册的整理上还作了调整:
删除了页面中的php中文社区链接,因为该链接已经失效;但还是为该社区做下广告--[PHP中文社区](http://www.phpnet.cn):);
为了阅读流畅、译文更准确起见,本手册修改了部份原2手册的翻译文字,包括函数名等的翻译,请留意;
没有翻译[{php}](#)和[{include_php}](#)这两个内置函数,因为大量使用这两个函数会使Smarty失去意义,如果有需要可查看英文手册,或原2手册。
另外在2手册的基础上作了些其它改变:
增加了简单的Smarty示意图;
统一了原2手册的命名,因为Smarty2.x手册是由多人合译的,在命名方面稍显凌乱;
统一提示、注意、译注、警告等样式;
为阅读方便,由原来的一段英文对应一段的翻译改为按情况1对1或n对n的连续翻译做法;
增加了3.0.x安装包里面两个文件的翻译,分别是《[smarty2_bc_notes](#)》和《[readme](#)》,因为本人觉得这两个文件很重要,特别是对于由2升至3的使用者。建议老用户通读这两个文件;
可能很多人都有与我一样的感受---查看中英文对照翻译版本非常累,要么阅读纯粹的英文版本,要么阅读纯中文版本,但,翻译纯中文版本的前提是译文准确。因此,为实现这个目标,我会先将本中英版本放上网络,等待大家的翻译改进意见,到时机成熟时再推出纯中文Smarty3手册。
另外,原英文manual手册中出现了不少笔误,本人在翻译过程中尽量按上下文语意理解,实在难以解释的地方旁边加译注,希望有识之人能在阅读过程中反馈回来,以便在新Smarty3中文手册中加以改进。
为尊重翻译起见,建议转载本手册的用户保留手册里面的翻译列表,特别是需要分解手册为单页面放入网络的人士。
如果原php社区翻译人员在翻译或注明翻译人员安排方面有异议请与本人联系。
二、翻译来由
仰慕Smarty的大名已很久。对于所有的phper,模板始终是一个绕不过的垦,当然,对于大公司而言可像discuz!一样使用自己的模板,而不必再奢求另一种模板语言。但对于大部份的phper而言,使用现成的、可靠的模板语言还是最现实的选择。而Smarty则是php模板语言中的杰出者,它酒精考验---发展近10年,功能强大---自定义书写方式、自定义插件、自定义函数...简直随心所欲,机制合理---编译、缓存,而且价格公道---免费,如此Smarty怎能叫人不爱呢?!
嗯,虽然Smarty足够优秀,但它并非只是由几段简单的php语句构成,就像很多时候,当一个美女站在你面前时,你并非总能立即长插直入,虽然这种情况也有,但事后你会觉得兴趣全无,大部份时候,你需层层剥离、拨云见日才能达到目标,而Smarty就是那种需要你琢磨、捣鼓的东东,因为它内涵丰富、气质独特,它包含有变量、调节器、函数、插件、方法、编译、缓存等一大堆内容。所以,毫不夸张地说,你在学php以外的另一种语言。
当观摩完(配不上学)php一年之后,面对Smarty,我遇到了一个难题,那就是Smarty3完成没有中文手册!我只能找来Smarty2中文配Smarty3观摩一番,问题出现了,Smarty3并非是Smarty2的简单升级,它改了内核,调整了内容,当你完全按照Smarty2手册的指示实践时,错误频出。
怎么办?网络是绝望了,如果你搜索下载Smarty3中文手册,那你就被骗了,因为它在本手册诞生前并不存在。而对于英文manual,我真的不想再装逼看下去,因为它令人头痛,而且纯pdf的格式我喜欢不来。
经过几天几夜的思考,我决定豁出去了,准备拯救一回世界,为此我断断续续总共花费了近2个月,然后...,基本这就是本手册诞生的过程啦:)。
不过,希望大家不要对我抱太大的希望,本人英语水平只有可怜的四级,而且考了几回,最重要的是那还是七八年前的事了。能借助有道字典与google翻译把每个单词看懂已实属不易(其实还有很多并不明白),而要把它们串联起来则更加困难;再者,对于php,对于smarty我并不比你懂,所以,我对手册中翻译错误频出非常有信心。如果各位能在百忙之中抽时间帮我改正、指点一二,在下十分感激。
三、Smarty示意图
1、工作流程示意图
![](https://box.kancloud.cn/2015-09-02_55e6699ab7ed3.jpg)
2、文件结构示意图
![](https://box.kancloud.cn/2015-09-02_55e669a0565d2.gif)
3、第一个Smarty模板
<table border="0" bgcolor="#e0e0e0" width="100%"><tbody><tr><td><p>test.php:<br/> //放在/demo文件夹下面<br/> <?php<br/> include_once('../libs/Smarty.class.php');<br/> $smarty = new Smarty;<br/> $var = 'hello!';<br/> $smarty->assign('abc',$var);<br/> $smarty->display('test.html');</p> <p>test.html:<br/> //放在/demo/templates文件夹下面<br/> {assign var="bcd" value="everyone!"}<br/> {$abc}{$bcd}</p> <p>输出:<br/> //输入网址http://127.0.0.1/smarty/demo/test.php<br/> hello,everyone!</p></td> </tr></tbody></table>
译注
| 可以看到上面有两个assign,都用来赋值。第一个为Smarty方法,用在php程序里面,第二个为内置函数,用在模板中赋值。 |
|-----|
<table cellspacing="0" cellpadding="0" width="100%" summary="Footer navigation table" border="0"><tbody><tr><td valign="top" align="left" width="33%"><a accesskey="P" href="preface.html">Prev</a></td> <td valign="top" align="center" width="34%"><a accesskey="H" href="index.html">Home</a></td> <td valign="top" align="right" width="33%"><a accesskey="N" href="getting.started.html">Next</a></td></tr><tr><td valign="top" align="left" width="33%">Preface<br/> 序</td> <td valign="top" align="middle" width="34%"> </td> <td valign="top" align="right" width="33%">Getting Started<br/> 开始</td></tr></tbody></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使用指南
- 翻译人员列表