/* 學習 Smarty */
官網: http://www.smarty.net/
文檔(含中文版的): http://www.smarty.net/documentation
中文版: http://www.smarty.net/docs/zh_CN/php
== 設計理念 ==
* 乾淨地分離顯示邏輯和程序代碼.
* 加強 php.
* 快速開發/部署
* 快速/簡單的維護
* 語法簡單易懂
* 靈活的自定義開發
* 安全
* 免費, 開源, 不斷進步html
== 分離的重要性 ==
1. 語法: 模板語法更符合 HTML 語義. smarty 使用簡單的 {標籤} 語法.
2. 鬆耦合: 分離頁面和業務邏輯. 有安全特性.程序員
== 實踐很重要 ==
能夠參考 Smarty 網站上最佳實踐的文章.數組
== 工做原理? ==
'編譯' 模板爲 PHP 代碼, 也有緩存.緩存
== 模板繼承 ==
出現繼承以前, 模板分爲多片, 可能會致使許多問題.
** 相似於面向對象的繼承, 父模板提供可重載的區域(方法). **安全
== 整合 ==
Smarty 容易被整合到 MVC 中成爲 View 層.架構
* 和其餘的軟件技術同樣,Smarty也有着學習曲線。
* Smarty不必定保證良好的程序設計或者達成顯示分離的目的,這還得須要
開發者和模板設計師的努力。app
== Chapter 1. Smarty 是什麼? ==ide
經過分離模板/程序, 模板設計師/程序員 能夠分離工做而不影響對方.
* 業務邏輯和顯示邏輯分離,是Smarty的一個設計理念。
* 意味着限定了模板 僅 做爲顯示用的邏輯. 如: `包含` 其它模板,
`交替` 表格行顏色, `循環` 遍歷數組並 `顯示` 出來.
=== 特性 ===
* 快速.
* 只編譯一次.
* 聰明地 '從新編譯'
* 很是具備可擴展性: 本身的 函數, 變量修飾器
* 可配置的
* 條件語句使用原生 php
* 無限層嵌套
* 緩存
* 模板繼承
* `插件` 架構.函數
== Chapter 3. 基本語法 ==
默認定界符 { 和 } (能夠配置改變)
* 註釋: {* this is comment *}
這是內部進行一些標記 而不被人看到的好方法.
在模板中使用 註釋 是一個好習慣!
?能夠直接輸出 <select> ...
{html_options options=$vals selected=$selected_id}
* 註釋不能嵌套.
=== 變量 ===
{$foo} --- 顯示簡單的變量
{$foo[4]}
{$foo.bar} --- 等同於 php $foo['bar']
{$foo.$bar} --- $foo[$bar]
{$foo->bar} --- $foo->bar
{$foo->bar()} --- $foo->bar()
{#foo#} --- 變量配置文件相關
{$smarty.config.foo}
{$foo[bar]}
{assign var=foo value='baz'}{$foo} --- 見 {assign}
還能夠合成, 數學運算, 嵌入, 嵌套下標.
{$x+$y}
{$foo={counter}+3}
實踐: 最好的方式保持模板語法的簡潔.
=== 函數 ===
語法: {funcname attr1="val1" attr="val2"}
內置函數, 自定義函數 語法相同.
自定義函數經過 插件 定義的, 如 {html_options}
=== 修飾器 ===
{$x|func:param...}
=== 內置函數 ===
== Chapter 17. 高級特性 模板繼承 ==
從面向對象變成而來的概念. 可讓你定義一個或多個父模板, 提供
給子模板來進行擴展. 擴展表示 子模板能夠覆蓋部分或所有模板的塊區域.
子模板不能定義任何內容, 除了 {block} 之外的地方.
模板繼承性能更高.
子模板使用 {extends} 標籤.
也能夠在 php 中調用時指定:
$smarty->display('extends:layout.tpl|myproj.tpl|mypage.tpl');
=== {block} ===
屬性 name, 如 {block name='sidebar'}
子模板中可以使用的可選屬性:
append, prepend, hide, nocache
parent.tpl: {block name="title"}Default ...{/block} child.tpl: {extends file="parent.tpl"} {block name="title"} -- 可選加 append,prepend 等屬性 Page Title {/block}