三、综合案例——PHP+Smarty完成数据分页
1、数据库设计
p_id int
p_title varchar
p_addtime int
2、设计HTML界面(ok)
3、编写程序
fenye.php fenye.html
效果:
四、程序篇
常量
变量
常用方法
缓存控制技术
1、常量
SMARTY_DIR
2、变量
$template_dir :模板路径
$compile_dir :编译目录
$config_dir :配置文件目录
$cache_dir :缓存目录
$left_delimiter :左分界符
$right_delimiter :右分界符
$caching :缓存开关,Boolean类型,true和false,默认false
$cache_lifetime :缓存周期,默认情况3600秒 1个小时
$debugging :调试开关,Boolean类型,默认为false
$php_handling :Smarty3.0中已基本无效,默认整型
示例代码:
3、常用方法
assign :分配变量到模板文件(值传递)
assignByRef :分配变量到模板文件(引用传递)
append :以数组的形式分配变量到模板(值传递)
appendByRef :以数组的形式分配变量到模板(引用传递)
clearAllAssign :清除所有赋值操作
clearAssign :清除指定赋值操作
clearCache :清除缓存
configLoad :加载配置文件
clearConfig :清除配置信息
display :显示输出模板文件
fetch :载入文件到字符串
templateExists :判断模板文件是否存在
示例代码:
例1:assign与assignByRef的区别
例2:append方法
运行效果:
例3:clearAssign与clearAllAssign
例4:configLoad加载配置文件
例5:fetch方法
功能:载入文件到字符串
静态化技术
www.baidu.com/index.php?id=11
效果:
例6:templateExists判断模板是否存在‘
示例代码:
五、缓存篇
编译 < 缓存 < 静态化
1、Smarty中的缓存
默认是关闭,如果要使用,请开启Smarty缓存开关caching
2、使用Smarty缓存
示例代码:
运行效果:
3、缓存作用
1)加快网站的访问速度
2)减少服务器的压力
3)减少数据库服务器的压力你
4、缓存文件从“何”而来?
答:编译文件
5、Smarty工作原理图
6、isCached方法
基本语法
$smarty->isCached(“tpl.tpl”)
功能:用于检测模板是否拥有缓存
例1:通过smarty读取数据库中的一条记录
例2:通过缓存技术减少对数据库的读取
7、清除缓存
$smarty->clearCache(“tpl.tpl”)
清除指定页面的缓存
$smarty->clearAllCache()
清除所有页面缓存(cms系统后台的清楚缓存按钮)
通过clearCache可以清楚指定页面的缓存,我们通常用于单页面处理
公司简介 ----------------------------------- 更新页面
而我们的clearAllCache通常用于清除所有缓存,通过用于整个系统中
例如ecshop右上角的清除缓存按钮,dedecms更新缓存
8、单页面多缓存
www.shop.com/show.php?id=1 读取id为1的产品内容
通过实验可知,只有第一次访问时,系统可以正常读取,以后每次访问时,系统自动转向第一次请求的缓存页面,无论参数如何变化
如何解决?
答:通过单页面多缓存
基本语法:
$smarty->display(“tpl”, “唯一值”)
实例代码:
该功能主要用于详细内容页。
9、缓存集合
问题:以上问题,如果有多个参数
答:可以通过缓存集合的方式来解决以上问题
示例代码:
以上代码主要应用于分类页或列表页
10、局部缓存
在项目中,可能有些功能或模块并不需要进行缓存(如点击次数、评论),如何解决呢?
$smarty->assign(“var”, “value”, true) :当前变量不缓存(PHP入口)
{$var nocache=true} :当前变量不缓存(模板页)
{nocache}{/nocache} :某个区块不缓存(模板页)
示例代码:
例1:
例2:
例3:区域缓存
六、过滤器
1、什么是过滤器
tpl源文件 =〉Prefilter =〉编译tpl文件 => Postfilter =>保存到磁盘=> 编译过的php文件执行=〉Output Filters(=〉如果有smarty cache的话,Output Filters的内容会缓存) =>结果输出。
Prefilter:前置(预)过滤器(标签替换成动态代码发生的)
Postfilter:后过滤器(编译文件保存到硬盘时发生的)
OutputFilter:在请求转发回用户时触发此过程
2、验证过滤器的存在
在Smarty3.0中使用以下方式创建过滤器
$smarty->registerFilter($type, $callback)
$type:定义过滤器的类型
pre 预过滤器
post 后过滤器
output 输出过滤器
$callback:自定义函数
七、整合Smarty到MVC
1)在Core中创建Tools文件夹用于保存第三方框架文件
2)复制smarty到Core中Tools文件夹
3)在View.class.php核心视图类中引用Smarty入口文件
4)在Action.class.php核心控制器中创建如下语句
public function __constructor() {
$this->view = new View();
$this->view->setTemplateDir(‘模板存放路径’);
}
5)以后就可以在所有控制器中使用$this->view->assign()与$this->view->display()方法