<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、工作流程示意圖

2、文件結構示意圖

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使用指南
- 翻譯人員列表