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');//指定模板页
php smarty程序设计,Smarty程序设计-动态文件操作相关推荐
- matlab编写文件格式,MATLAB程序设计教程(4)——MATLAB文件操作
MATLAB程序设计教程(4)--MATLAB文件操作 第4章MATLAB文件操作 4.1 文件的打开与关闭 4.2 文件的读写操作 4.3 数据文件定位 4.1 文件的打开与关闭 4.1.1 文 ...
- 计算机测绘程序设计实验报告,测绘程序设计(VS2008)实验报告--文件操作.docx
测绘程序设计(VS2008)实验报告--文件操作.docx 上传人:B****s 文档编号:18365883 上传时间:2019-04-28 格式:DOCX 页数:9 大小:102.93KB 下载提示 ...
- matlab %4.3f,MATLAB程序设计教程(4)—MATLAB文件操作
第4章 MATLAB文件操作 4.1 文件的打开与关闭 4.2 文件的读写操作 4.3 数据文件定位 4.1 文件的打开与关闭 4.1.1 文件的打开 fopen函数的调用格式为: fid= fope ...
- 《C语言及程序设计》程序阅读——文件操作
返回:贺老师课程教学链接 1.阅读下面的程序,写出输出结果,并上机运行程序进行对照 #include "stdio.h" int main() {FILE *outfile,*in ...
- c语言通讯录动态文件操作,学C三个月了,学了文件,用C语言写了个通讯录程序...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include struct QQ //结构体,有6个成员 { char name[20]; ch ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作 描述:PHP程序设计语言中文件操作的函数很多,如何获取文件的信息,如果打开文件,如果关闭文件,读取文件,写入文件,复制文 ...
- C语言程序设计 文件操作函数
文件操作函数 C语言 (FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别 ...
- C语言程序设计|文件操作
运行结果: 1.为什么使用文件 为了数据的持久化,一般数据持久化的方法有,把数据存放在磁盘文件.存放到数据库等方式 使用文件我们就可以将数据直接存放在电脑的硬盘中,做到了数据的持久化 举个例子,在通讯 ...
- 基于java的千千影评网站的设计与实现(论文+程序设计源码+数据库文件)
摘要:信息技术高度发达的今天,新闻业已经在互联网行业中占越发主导地位.而我们的生活也跟新闻息息相关,尤其是在高度发达的精神文化社会,人们对于电影的喜爱也越来越热衷,但想挑到自己喜爱的片子,就需要影评网 ...
- 基于Android公交查询系统的设计与实现(论文+程序设计源码+数据库文件)
[摘 要]随着互联网的技术的不断更新发展,人们生活节奏也在不断的加快,对于网络的依赖也越来越紧密,尤其是在等公交,经常会错过班次,但又不知道,下次班次几点发车,这样会导致乘客花掉大把时间在等待,如果可 ...
最新文章
- 东北大学 | 一种适用于大规模公路环境的鲁棒激光惯性里程计和建图系统
- Json入门及基本应用
- RecyclerView高级控件-附实例【android专题】
- Java中的定制国际化(i18n)
- 常用容器(Collection)实现类总结(四)——HashSet
- APP里如何添加本地文本
- distenct oracle_Oracle的distinct关键字
- 如何高效的编写与同步博客 (.NET Core 小工具实现)
- 关于这道填空题,你会如何回答?(附带学习链接)
- Python中使用psutil查看内存占用的情况(内存)
- 【AI视野·今日NLP 自然语言处理论文速览 第二十五期】Fri, 1 Oct 2021
- 【面试】判断一棵二叉树是否为二叉排序树
- Android学习之碎片的生命周期
- xp怎么删除计算机用户,谁了解xp系统如何删除工作组计算机
- CacheCloud部署与群集申请流程测试
- html隐藏标签console,console的隐藏知识点,你get到了嘛?
- 【ZYNQ】从入门到秃头02 ZYNQ硬件介绍和Vivado开发流程
- 【珍藏版】震撼发布2017年Android百大框架排行榜
- 4826 Problem A 计算组合数
- 山下英子(日)《断舍离》读书笔记