文档章节

学习 smarty

刘军兴
 刘军兴
发布于 2016/06/12 17:22
字数 825
阅读 30
收藏 1

/* 学习 Smarty */
官网: http://www.smarty.net/
文档(含中文版的): http://www.smarty.net/documentation
   中文版: http://www.smarty.net/docs/zh_CN/

== 设计理念 ==
* 干净地分离显示逻辑和程序代码.
* 增强 php.
* 快速开发/部署
* 快速/简单的维护
* 语法简单易懂
* 灵活的自定义开发
* 安全
* 免费, 开源, 不断进步

== 分离的重要性 ==
1. 语法: 模板语法更符合 HTML 语义. smarty 使用简单的 {标签} 语法.
2. 松耦合: 分离页面和业务逻辑. 有安全特性.

== 实践很重要 ==
可以参考 Smarty 网站上最佳实践的文章.

== 工作原理? ==
'编译' 模板为 PHP 代码, 也有缓存.

== 模板继承 ==
出现继承之前, 模板分为多片, 可能会导致许多问题.
** 类似于面向对象的继承, 父模板提供可重载的区域(方法). **

== 整合 ==
Smarty 容易被整合到 MVC 中成为 View 层.


* 和其他的软件技术一样,Smarty也有着学习曲线。
* Smarty不一定保证良好的程序设计或者达成显示分离的目的,这还得需要
  开发者和模板设计师的努力。

== Chapter 1. Smarty 是什么? ==

通过分离模板/程序, 模板设计师/程序员 可以分离工作而不影响对方.
* 业务逻辑和显示逻辑分离,是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}

 

© 著作权归作者所有

刘军兴
粉丝 60
博文 189
码字总数 237645
作品 0
昌平
私信 提问
Smarty程序 failed to open stream??

刚起步学习PHP,在学习Smarty基本配置时,按书本编代码,可是却运行不了。出了什么问题? 实例代码如下: template_dir=BASE_PATH.SMARTY_PATH.'templates/'; $smarty->compile_dir=BASE_PAT...

Hiky
2012/11/17
904
3
自己理解的smarty 引擎模版 (一)

最近我学习了smarty ,算是零基础学习,没有php 基础的建议看看基础 不要向我直接入手 有点困难 。本来自己是搞java,有点基础。公司要求 那就硬头皮学学吧 看了网上一些大牛是用 smarty 框架...

空_明
2013/06/08
169
3
yaf 学习

yaf 学习 C扩展的php框架Yaf采用自动加载机制,如果你的类库不符合yaf的标准,请将你的中的设置为1, 使用,在中提供整个项目的启动配置,可以将很多自定义的方法放到里面 使用bootstap yaf 使用...

eatnothing
2016/08/04
252
0
构建mvc框架学习

做了那么久PHP开发,开始尝试去做一个简单的mvc框架。 一、首先确定目录结构 由于不太想弄得太复杂的结构,因此,将所有的目录存放于libs中,项目根目录只留一个index.php以及config.php,形...

AlpherJang
2016/03/03
101
0
PHP框架--LoadPHP

一个简单的基于smarty的PHP框架 1、可定制的URL路由 2、基于smarty,更容易上手 3、数据库级联操作 4、内置常用实用类 ... 可用于框架开发的学习

亓斌哥哥
2014/11/09
639
0

没有更多内容

加载失败,请刷新页面

加载更多

用原生js对表格排序

本文转载于:专业的前端网站➸用原生js对表格排序 阿里的模拟笔试题,当时时间有限没写出来,其实是因为自己对原生dom操作不熟悉,这里补一下。 题目的大意是有一个表格,如代码所示 <table>...

前端老手
35分钟前
5
0
IT兄弟连 HTML5教程 HTML5表单 HTML5新增表单元素

HTML5有一些新的表单元素:<datalist>、<keygen>、<output>。不是所有的浏览器都支持HTML5新的表单元素,但即使浏览器不支持该表单属性,仍然可以显示为常规的表单元素。 1 <datalist>元素 ...

老码农的一亩三分地
36分钟前
4
0
【朝花夕拾】Android自定义View篇之(一)View绘制流程

https://www.cnblogs.com/andy-songwei/p/10955062.html

shzwork
38分钟前
5
0
Qt编写自定义控件70-扁平化flatui

一、前言 对于现在做前端开发人员来说,FlatUI肯定不陌生,最近几年扁平化的设计越来越流行,大概由于现在PC端和移动端的设备的分辨率越来越高,扁平化反而看起来更让人愉悦,而通过渐变色产...

飞扬青云
48分钟前
3
0
教你玩转Linux—添加批量用户

添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个、上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加,必然要找一种简便的创建大量用户...

Linux就该这么学
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部