日期:2011-08-25  浏览次数:20554 次

Smarty2.0在线手册

http://www.php100.com/manual/smarty

Smarty3.0在线手册

http://www.php100.com/manual/smarty3

 

1、安装Smarty3.0

一、什么是smarty?

smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲, 目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计, 美工重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

二、smarty优点:

1. 速度:采用smarty编写的程序可以获得最大速度的提高,这一点是相对于其它的模板引擎技术而言的。

2. 编译型:采用smarty编写的程序在运行时要编译成一个非模板技术的PHP文件, 这个文件采用了PHP与HTML混合的方式,在下一次访问模板时将WEB请求直接转换到这个文件中, 而不再进行模板重新编译(在源程序没有改动的情况下) 

3. 缓存技术:smarty选用的一种缓存技术,它可以将用户最终看到的HTML文件缓存成一个静态的HTML页, 
当设定smarty的cache属性为true时, 在smarty设定的cachetime期内将用户的WEB请求直接转换到这个静态的HTML文件中来, 这相当于调用一个静态的HTML文件。

4. 插件技术:smarty可以自定义插件。插件实际就是一些自定义的函数。

5. 模板中可以使用if/elseif/else/endif。在模板文件使用判断语句可以非常方便的对模板进行格式重排。

三、不适合使用smarty的地方:

1. 需要实时更新的内容。例如像股票显示,它需要经常对数据进行更新,这类型的程序使用smarty会使模板处理速度变慢。

2. 小项目。小项目因为项目简单而美工与程序员兼于一人的项目,使用smarty会丧失php开发迅速的优点。

打开smarty的官方网站,www.smarty.net/download.php。下载Smarty 3.0rc4, 目前仍然是处于rc版本(Release.Candidate.就是发行候选版本,与beta版本相比,不再有功能的增加,主要着重于除错!)。 有tar.gz和zip分别适用于linux和windows版本。

下载好后tar –zxvf Smarty 3.0rc4.tar.gz

目录中,demo文件夹为示例文件。Libs为程序文件。

/libs/Smarty.class.php   #主文件

/libs/sysplugins/  #内部plugin

/libs /plugins/   #外部plugin,可自由扩充

/demo/cahce/   #放置缓存文件

/demo/configs /   #放置可以载入的配置文件

/demo/templates/   #放置模板文件

/demo/templates_c/    #放置对模板编译后的文件

最好在需要进行smarty处理的文件的目录中创建与demo中的相同的文件夹(注意文件夹具有web用户写权限), 当然也可以更改文件夹名和路径,默认值为处于被smarty处理的文件的同级目录。Smarty3.0需要php5.0以上。

2、调试Smarty3.0

创建自己的文件,比如index.php。 
在templates目录中创建模板index.tpl(几乎可以是任何文本文件的扩展名, 常用的是tpl,php,html,不建议使用后两者,因为可以从浏览器直接访问而不安全。 可以对apache的httpd.conf进行设置,禁止直接访问.tpl文件。或者将templats目录放在网站文档树之外。)

[Index.php] 

require_once("../../Smarty-3.0rc4/libs/Smarty.class.php");

$smarty = new smarty();

$smarty->assign(‘name’,'韩灵稚’);

$smarty->display(‘templates/index.tpl ‘);

[Index.tpl]的代码:

<html><body>

<span>你好, {$name}</span>

</body></html>

Smarty编译时的处理过程是源php文件->模板文件(可能多次调用)->源php文件。。。 
也就是说不影响原php文件的其他处理和输出。所以smarty模板文件可以是完整的html,也可以是其中一部分。

3、Smarty3.0基础3.1 smarty处理过程

smarty将php源文件,首先编译成中间文件(也是php),如果启用缓存, 再根据编译文件生成缓存文件(也是php),需要缓存的部分全部是硬编码。 之后的每次访问都会访问编译文件(如果编译文件已经存在), 一次编译多次调用(可以是单文件的多次,也可以是多文件的多次), 如果启用缓存且有缓存文件而且没有过期,则直接访问缓存文件,跳过编译文件。编译文件一经生成,就不会被自动更新,除非模板文件或者配置文件更改。 源php文件修改是不会引发重新编译的。 一旦编译文件重新生成,缓存文件也必然重新生成。 
Smarty允许有两种特殊的编译设置存在:

1、 任何时候都不自动重新编译(上线阶段):只有没有该文件的编译文件时才生成, 模板文件或者配置文件的更改,不会引发重新编译。

$smarty->setCompile_check(false)     
#默认为true,false表示任何时候都不在发生文件变更的情况下生成编译文件,除了无编译文件。

$smarty->getCompile_check()    #获得当前编译检查的设置

 2、任何时候都重新编译(调试阶段):任何时候都重新编译。

$smarty->setForce_compile(true)  #默认为false,true表示每次都重新编译(启用缓存的话,每次都重新缓存)

$smarty->getForce_compile()    #获得当前强制编译的设置

3.2 分界符 

在模板文件中,区分普通html代码和smarty代码靠的是分界符。默认情况下是“{ }“,但是与js和css相冲突。 
可以进行变更。在3.0中模板标签将不支持空格,如{  $abc&nb