/* 学习 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}