Smarty的应用
smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹
(1)libs核心文件夹
(2)int.inc.php这是入口文件
(3)plugins:自己写的插件文件夹
(4)templates_c:存放编译好的文件
(5)int.inc.php这是入口文件
(6)定义好常量:不能修改
二、怎么用模板?
模板页面
1.引入模板的入口文件
include("入口文件路径位置");
2.直接用对象
提供一个方法:向模板中注册变量的方法(assign(名字,值)
$smarty->assign("ceshi","你好");
提供一个方法:显示模板的(display(模板的名称或是路径))
$smarty->display("ceshi.html");
正常页面
{assign(名字)}
注意:
1.访问的是php的页面,显示的是html页面
2.html用到了外部的样式表,位置是相对于访问的php页面来找外部样式
(1)php页面
<?php
$filename = "../cache/huancun.html"; //这个是放缓存的页面(缓存的不是代码,而是页面的源信息) include("../init.inc.php"); //引入入口文件
include("../DBDA.php"); //引入数据库,要用到数据库的内容 $db = new DBDA(); //造新对象
$sql = "select * from chinastates"; //这是查找Chinastates表中的信息
$attr = $db->Query($sql); //执行这个语句 $smarty->assign("shuzu",$attr); //注册变量信息
$smarty->display("huancun.html"); //显示模板
(2)html页面
可以用表来显示数据
<h1>数据列表</h1>
<table width="50%" border="1" cellpadding="0" cellspacing="0">
<tr>
<td>代号</td>
<td>名称</td>
<td>操作</td>
</tr> <{foreach $shuzu as $v}> <!--遍历显示这个表中的相应信息-->
<tr>
<td><{$v[0]}></td>
<td><{$v[1]}></td>
<td>操作</td>
</tr>
<{/foreach}> </table>
看下效果
二、就是编写“缓存”功能
进行写入缓存的时候不是写入的上面的php页面,而是这个页面的源代码
(1)这个cache文件中要判断这个huancun.html文件存不存在,存在怎么样?不存在怎么样?
结果就是:如果缓存文件存在:直接调用缓存;如果缓存文件不存在:重新缓存。
A.如果这个文件存在(判断文件存不存在用的是:file_exists()方法)语句:
if(file_exists($filename))
{
//直接调用缓存
include($filename);
}
B.否则(文件不存在)
重要的是要在上面读取数据库的内容加上这几项:
1.开启内存缓存;
2.关闭内存缓存;
它们是成对的!!!
else
{
//重新缓存
ob_start(); //开启内存缓存 include("../init.inc.php");
include("../DBDA.php"); $db = new DBDA();
$sql = "select * from chinastates";
$attr = $db->Query($sql); $smarty->assign("shuzu",$attr);
$smarty->display("huancun.html"); $str = ob_get_contents(); //获取内存中的缓存内容
file_put_contents($filename,$str); //将字符串中的内容放入$filename的文件中 ob_flush(); //关闭内存缓存 echo "#######################################"; //这个是为了区别哪个是刚出来的缓存文件 }
看下效果如下图,因为cache文件夹中没有hunacun.html才会走上面的“否则”语句,输出一长串的######
再刷新一下就没有了,因为cache文件夹中已经有了huancun.html文件
三、缓存的有效时间
缓存要是一直都在的话,那么后台怎么改,前面也不会进行修改,那么就要尽心缓存的有效时间
代码如下:
$time = 10; //缓存有效期10秒
if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) ) //这是对缓存文件的判断
当缓存文件有了并且10秒之后就会重新又没有缓存文件时候的输出####
四、进行分页的缓存
首先是分页的php页面的书写,在上面的更新的php页面中进行再一次修改,如下:
<?php
$p = 1;
if(!empty($_GET["page"]))
{
$p = $_GET["page"];
} $filename = "../cache/huancun{$p}.html"; //缓存文件存放的位置 $time = 10; //缓存有效期10秒
if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) )
{
//直接调用缓存
include($filename);
}
else
{
//重新缓存
ob_start(); //开启内存缓存 include("../init.inc.php");
include("../DBDA.php"); $db = new DBDA();
$sqll = "select count(*) from chinastates";
$zts = $db->StrQuery($sqll); //总条数的执行语句 include("../page.class.php");
$page = new Page($zts,10); //分页显示的条数 $sql = "select * from chinastates ".$page->limit; //分页的$page->limit
$attr = $db->Query($sql); $smarty->assign("fpage",$page->fpage()); //分页信息的显示
$smarty->assign("shuzu",$attr);
$smarty->display("huancun.html"); $str = ob_get_contents(); //获取内存中的缓存内容
file_put_contents($filename,$str); //将$str的内容写入$filename的文件中 ob_flush(); //关闭内存缓存 echo "#######################################"; }
结果就是入下,每一个页面都会从缓存开始有,10秒后失效
这是第二个页面,刚开始没有缓存文件,所以会有####
随便点一页,回来后就是有了缓存文件,所以没有了###
最新文章
- [LeetCode] Logger Rate Limiter 记录速率限制器
- [ASP.NET MVC 小牛之路]08 - Area 使用
- Oracle之ORDER BY
- Question2Answer安装
- .NET中的枚举(Enum)
- android AsyncTask 只能在线程池里单个运行的问题
- dede模版列表调用文章正文内容的方法
- ARM嵌入式整理
- GPU CUDA常量内存使用
- Base64的Java代码实现
- iOS--九宫格布局
- MySQL添加外键的方法
- Java集合源码分析(三)Vevtor和Stack
- ASP.NET Core 3.0预览版体验
- webDriver定位元素的方法
- 1013. Battle Over Cities 用dfs计算联通分量
- Java中抽象类和抽象方法的区别
- appium随笔
- 计算机意外地重新启动或遇到错误。windows安装无法继续。若要安装windows 请单击 确定 重新启动计算机
- 创建Maven项目出错