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');//指定模板页

php smarty程序设计,Smarty程序设计-动态文件操作相关推荐

  1. matlab编写文件格式,MATLAB程序设计教程(4)——MATLAB文件操作

    MATLAB程序设计教程(4)--MATLAB文件操作 第4章MATLAB文件操作 4.1 文件的打开与关闭 4.2  文件的读写操作 4.3  数据文件定位 4.1 文件的打开与关闭 4.1.1 文 ...

  2. 计算机测绘程序设计实验报告,测绘程序设计(VS2008)实验报告--文件操作.docx

    测绘程序设计(VS2008)实验报告--文件操作.docx 上传人:B****s 文档编号:18365883 上传时间:2019-04-28 格式:DOCX 页数:9 大小:102.93KB 下载提示 ...

  3. matlab %4.3f,MATLAB程序设计教程(4)—MATLAB文件操作

    第4章 MATLAB文件操作 4.1 文件的打开与关闭 4.2 文件的读写操作 4.3 数据文件定位 4.1 文件的打开与关闭 4.1.1 文件的打开 fopen函数的调用格式为: fid= fope ...

  4. 《C语言及程序设计》程序阅读——文件操作

    返回:贺老师课程教学链接 1.阅读下面的程序,写出输出结果,并上机运行程序进行对照 #include "stdio.h" int main() {FILE *outfile,*in ...

  5. c语言通讯录动态文件操作,学C三个月了,学了文件,用C语言写了个通讯录程序...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include struct QQ //结构体,有6个成员 { char name[20]; ch ...

  6. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作 描述:PHP程序设计语言中文件操作的函数很多,如何获取文件的信息,如果打开文件,如果关闭文件,读取文件,写入文件,复制文 ...

  7. C语言程序设计 文件操作函数

    文件操作函数 C语言 (FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别 ...

  8. C语言程序设计|文件操作

    运行结果: 1.为什么使用文件 为了数据的持久化,一般数据持久化的方法有,把数据存放在磁盘文件.存放到数据库等方式 使用文件我们就可以将数据直接存放在电脑的硬盘中,做到了数据的持久化 举个例子,在通讯 ...

  9. 基于java的千千影评网站的设计与实现(论文+程序设计源码+数据库文件)

    摘要:信息技术高度发达的今天,新闻业已经在互联网行业中占越发主导地位.而我们的生活也跟新闻息息相关,尤其是在高度发达的精神文化社会,人们对于电影的喜爱也越来越热衷,但想挑到自己喜爱的片子,就需要影评网 ...

  10. 基于Android公交查询系统的设计与实现(论文+程序设计源码+数据库文件)

    [摘 要]随着互联网的技术的不断更新发展,人们生活节奏也在不断的加快,对于网络的依赖也越来越紧密,尤其是在等公交,经常会错过班次,但又不知道,下次班次几点发车,这样会导致乘客花掉大把时间在等待,如果可 ...

最新文章

  1. 东北大学 | 一种适用于大规模公路环境的鲁棒激光惯性里程计和建图系统
  2. Json入门及基本应用
  3. RecyclerView高级控件-附实例【android专题】
  4. Java中的定制国际化(i18n)
  5. 常用容器(Collection)实现类总结(四)——HashSet
  6. APP里如何添加本地文本
  7. distenct oracle_Oracle的distinct关键字
  8. 如何高效的编写与同步博客 (.NET Core 小工具实现)
  9. 关于这道填空题,你会如何回答?(附带学习链接)
  10. Python中使用psutil查看内存占用的情况(内存)
  11. 【AI视野·今日NLP 自然语言处理论文速览 第二十五期】Fri, 1 Oct 2021
  12. 【面试】判断一棵二叉树是否为二叉排序树
  13. Android学习之碎片的生命周期
  14. xp怎么删除计算机用户,谁了解xp系统如何删除工作组计算机
  15. CacheCloud部署与群集申请流程测试
  16. html隐藏标签console,console的隐藏知识点,你get到了嘛?
  17. 【ZYNQ】从入门到秃头02 ZYNQ硬件介绍和Vivado开发流程
  18. 【珍藏版】震撼发布2017年Android百大框架排行榜
  19. 4826 Problem A 计算组合数
  20. 山下英子(日)《断舍离》读书笔记

热门文章

  1. AppLoader的使用
  2. mdt 计算机名_MDT配置数据库
  3. js 车牌号模糊处理
  4. javascript服务端编程
  5. ubuntu 黑体_linux ubuntu 思源黑体安装
  6. 基于FPGA的1080P 60Hz BT1120接口调试过程记录
  7. 大数据:HBase安装、配置及使用
  8. uniapp 前端数据显示数据字典值 程序设计
  9. 藏在耳机里的小东西——蓝牙天线
  10. 计算机视觉论文-2021-06-01