php smarty程序设计,Smarty程序设计-动态文件操作

Smarty程序设计-动态文件操作

Smarty程序设计在动态PHP文件中进行操作,其功能可以分为两种:一种功能是配置Smarty,如变量template_dir、$config_dir等;另一种功能是和Smarty模板之间的交互,如方法assign、display。

SMARTY_PATH常量

SMARTY_PATH常量定义Smarty类文件的完整系统路径,如果没有定义Smarty目录,Smarty将会试着自动创建合适的值。如果定义了路径必须要以斜线结束。该常量的应用是在Smarty的配置文件中,通过它获取Smarty类的绝对路径。

例如,在上小节创建的配置config.php中,就应用到这个常量。关键代码如下:

define('BASE_PATH',$_SERVER['DOCUMENT_ROOT']);//定义服务器的绝对路径

define('SMARTY_PATH',\Smarty\\');//定义Smarty目录的绝对路径

require BASE_PATH.SMARTY_PATH.'libs\Smarty.class.php';//加载Smarty类库文件

Smarty程序设计变量

在Smarty中提供了很多的变量,这里只讲解比较常用的几个,如果读者想详细地了解Smarty变量,请参考Smarty的手册。

$templte_dir:模板目录。该目录来存放Smarty模板,在前面的实例中,所有的.html文件都是Smaarty模板。模板的后缀没有要求,一般为.html、.tpl等。

$compile_dir:编译目录。顾名思议,就是编译后的模板和PHP程序所生成的文件默认路径为当前执行文件所在的目录下的templates_c目录。进入到编译目录,可以发现许多“%%...%%index.hgtml.php”格式的文件。随便打开一个这样的文件可以发现,实际上Smaarty将模板和PHP程序又重新组合成一个混编页面。

$cache_dir:缓存目录。该目录用来存放缓存文件。同样,在cache目录下可以看到生成的.html文件。如果caching变量开启,那么Smarty将直接从这里读取文件。

$config_dir:配置目录。该目录用来存放配置文件。

设计变量。该变量可以打开调试控制台。只要在配置文件(config.php)中将$smarty->debugging设为TRUE即可使用。

$caching:缓存变量。该变量可以开启缓存。只要当前模板文件和配置文件未被改动,Smarty就直接从缓存目录中读取缓存文件而不重新编译模板。

Smarty方法

在Smarty提供的方法中,最常用的是assign方法和display方法。

1.assing方法

assing方法用于在模板执行时为模板变量赋值。语法如下:

{assign var ="" value=""}

参数var是被赋值的变量名,参数value是赋给变量的值。

display方法

display方法用于显示模板,需要指定一个合法的模板资源的类型和路径。还可以通过第二个可选参数指定一个缓存号,相关的信息可以查看缓存。

void display (string template[,string cache_id[,string complle_id]])

参数template指定一个合法的模板资源的类型和路径;参数cache_id为可选参数,指定一个缓存号;参数compile_id为可选参数,指定编译号。编译号可以将一个模板编译成不同版本使用,如针对不同的语言编译模板。编译号的另外一个作用是,如果存在多个$template_dir模板目录,但只有一个$compile_dir编译后存档目录,这时可以为每一个$template_dir模板目录指定一个编译号,以避免相同的模板文件在编译后会互相覆盖。相对于在每一次调用display()时都指定编译号,也可以通过设置$compile_id编译号属性来一次性设定。

Smarty

在讲解Smarty的缓存之前,先将它和Smarty的编译过程做一个对比,让读者明白缓存到底意味着什么。

Smarty的编译功能默认是开启的,而Smarty缓存则必须由开发人员来开启。

编译的过程是将模板转换为PHP脚本,虽然在模板没有被修改的情况下,不会重新执行转换过程,但这个编译过的模板其实就是一个PHP脚本,只是减少了模板转换的压力,仍需要在逻辑层执行获取数据的操作,而这个获取数据的操作是耗费内存最大的。

缓存则不仅将模板转换为PHP脚本,而且将模板内容转换为静态页面,不仅减少了模板转换的压力,也不再需要在逻辑层执行获取数据的操作。

这就是Smarty的缓存机制,它是一种更加理想的开发web程序的方法。下面就来学习这种技术。

1.创建缓存

开启缓存的方法非常简单,只要将Smarty对象中$config的值设置为TRUE即可,同时还要通过Smarty对象中的$cache_dir属性指定缓存文件的存储位置。操作代码如下:

$smarty->caching=true;

$smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';//定义缓存文件存储位置

2.缓存的生命周期

缓存创建成功后,必须为它设置一个生命周期,如果它一直不更新,那么就没有任何意义。设置缓存生命周期应用的是Smarty对象中的$cache_lifetime属性,缓存时间以秒为单位,默认值是3600秒。操作代码如下:

$smarty->caching=true;//开启缓存

$smarty->cache_dir = BASE_PATH>SMARTY_PATH.'cche/';//定义缓存文件存储位置

$smarty->cache_lifetime=3600//设置缓存时间为1小时

如果将$caching的值设置为2,那么就可以控制单个缓存文件各自的过期时间。

3.同一模板生成多个缓存

在实际的程序开发中,经常会遇到这样的情况,同一个模板文件生成多个页面。而此时要对多个页面进行缓存,就用的是Smarty中的display()方法,通过该方法的第二个参数设置缓存号,有几个不同的缓存号就有几个缓存页面。操作代码如下:

$smarty->caching=true;//开启缓存

$smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';//定义缓存文件存储位置

$smarty->cache_lifetime=3600;//设置缓存时间为1小时

$smarty->display('index.html',$_GET['id']);//将id作为第二个参数传递

4.判断模板文件是否已被缓存

如果页面已经被缓存,那么就可以直接调用缓存文件,而不再执行动态获取数据和输出的操作。为了避免在开启缓存后,再次执行动态获取数据和输出操作给服务器带来的压力,最佳的方法就是应用Smarty对象中的is_cached()方法,判断指定的模板是否存在缓存,如果存在则直接执行缓存中的文件,否则执行动态获取数据和输出的操作。操作代码如下:

$smarty->caching=true;

if($smarty->is_cached('index.html')){//开启缓存

//执行动态获取数据和输出的操作

}

$smrty->display('index.html');

你问我答:如何判断同一模板中的多个缓存文件?

判断同一模板中的多个缓存是否存在与同一模板生成多个缓存类似,都是以缓存号为依据。判断同一模板的多个缓存是否存在应用is_cached()方法,通过该方法的第二个参数设置缓存号,判断对应的缓存是否存在。其方法如下:

$smarty->caching=true;

$smarty->cache_dir = BASE_PATH.SMARTY_PATH.'cache/';//定义缓存文件存储位置

$smarty->cache_lifetime=3600;//设置缓存时间为1小时

if(!$smarty->is_cached('index.html',$_GET['id'])){

//执行动态获取数据和输出的操作

}

$smarty->display('index.html',$_GET['id']);//将id作为第二个参数传递

5.清除模板中缓存

缓存的清除有两种方法,分别介绍如下。

(1)clear_all_cache()方法,清除所有模板缓存。其语法如下:

void clear_all_cache(int expire time)

可选参数expire time,可以指定一个以秒为单位的最小时间,超过这个时间的缓存都将被清除。

(2)clear_cache()方法,清除指定模板的缓存。其语法如下:

void clear_cache(string template[,string cache id[,string compile id [, int expire time]]])

如果这个模板有多个缓存,可以用第二个参数指定要清除缓存的缓存号,还可以通过第3个参数指定编译号。可以把模板分组,以便可以方便地清除一组缓存。第4个参数是可选的,用来指定超过某一时间(以秒为单位)的缓存才会被清除。

例如,分别应用这两种方法清除缓存。代码如下:

$smarty->caching=true;//开启缓存

$smarty->clear_all_cache();//清除所有缓存

$smarty->clear_cache('index.html');//清除index.html模板的缓存

$smarty->clear_cache('index.html','$_GET['id']');//清除index.html模板中一个指定缓存号的缓存

$smarty->display('index.html');//指定模板页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值