smarty模板里实现缓存。分页缓存在任何里都可以用

我用了三个类

include("../init.inc.php");//模板入口类
include("../DBDA.php");//自己写的方法1.成员变量2.返回字符串的方法
include("../page.class.php");//分页类

huancun.PHP文件

<?php

$p = 1;
if(!empty($_GET["page"]))
{
$p = $_GET["page"];
} //缓存网页放在cache文件夹里
//要把文件保存起来首先定义一个路径,需要知道这个文件夹保存的位置,路径相对于这个页面来说
$filename = "../cache/huancun{$p}.html";//缓存文件存放的位置filename $time = 10;//缓存有效期10秒 10秒一刷新在调取数据库 在执行缓存
//逻辑。如果文件存在并且在缓存时间内(取文件上次修改的时间获取的是时间戳)如果上次修改文件的时间加上10大于等于当前时间就调缓存 //判断缓存文件是否存在,如果缓存文件存在直接调用缓存,如果缓存文件不存在重新缓存。
if(file_exists($filename) && ((filemtime($filename)+$time)>= time()))//循环。判断 这句话是判断缓存有效期&& filemtime($filename)+$time>= time()
{
//直接调用缓存
include($filename);//如果存在直接用
}
else//如果不存在说明还没有缓存过
{
//重新缓存。就是从新访问数据库
ob_start();//开启缓存的方法,是开启内存的缓存,是指源代码 //访问数据库并显示出来
include("../init.inc.php");
include("../DBDA.php");
$db = new DBDA(); $sall = " select count(*) from nation ";//分页的总条数
$zts = $db->StrQuery($sall);//总条数 include("../page.class.php");//分页类
$page = new page($zts,2);//对象 条数每页显示2条 $sql = " select * from nation ".$page->limit;//他nation表
$arr = $db->Query($sql);//执行完返回二维数组 $smarty->assign("fpage",$page->fpage());//分页信息注册到变量里完了拿到前面显示
$smarty->assign("shuzu",$arr);
$smarty->display("huancun.html");//链接模板页 $str = ob_get_contents();//获取内存中的缓存内容:就是源代码
file_put_contents($filename, $str); //从缓存中取内容,获取内存中的缓存内容
$atr = ob_get_contents();//返回的是。把缓存的
file_get_contents($filename,$atr);//把缓存的文件 往filename 这句意思往文件里放内容 ob_flush();//关闭内存缓存 echo "##########################################################";
} ?>

huancun.html文件

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模板页</title>
</head>
<body>
<table width="100%" border="1" cellpadding="0" 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>
<div><{$fpage}></div>
</body>
</html>

缓存没有#  在主页面显示的是缓存在cache文件夹里的源代码

有#的时候是数据库里面的变动的文件

判断缓存文件是否存在

没有#号的时候缓存文件时存在的,如果缓存文件存在直接调用。如果缓存文件不存在从新加载缓存,从新加载缓存可以用时间戳。取文件上次修改的时间获取的是时间戳)如果上次修改文件的时间加上10大于等于当前时间就调缓存,如果小于10就走#这个页面

smarty模板里实现缓存。的更多相关文章

  1. smarty模板基础3 *缓存数据*

    缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存 通过一个例子来书写:缓存数据 一.书写php和html页面的基本功能 既然是用smarty模板,那么前端和后端要分开写了 (1)php页面 < ...

  2. Smarty模板

    Smarty模板 是做什么用的?? 是将前端的显示和后台的逻辑进行分离,就相当于把前台显示的页面和后台要实现的某些功能的逻辑给分离出来了,分离在两个文件里,也就是说,前端只负责显示,后端只负责逻辑操作 ...

  3. Smarty模板引擎技术二

    Smarty模板引擎技术 内建函数 include_php内建函数 作用:载入一个php文件,将载入的文件的内容赋值给一个变量   注意:该内建函数只能在2.0中使用,如果使用的话,必须得实例化Sma ...

  4. smarty模板调数据库并做添加删除修改和分页

    smarty模板只要就是实现分离效果所以每个功能都需要两个页面一个是HTML  和 PHP  两部分组成 使用smarty模板要在main文件夹下面创建login.php文本,要用smarty模板首先 ...

  5. smarty模板做人员表信息删除,修改 里面的性别单选按钮民族下拉,另外登录进去可以显示姓名

    首先登录进去可以显示姓名 smarty模板做人员表信息删除,删除的时候有提示框确定删除吗. 修改 里面的性别单选按钮,要修改谁有默认选中,用了变量调节器 民族位置做下拉,用<{foreach}& ...

  6. smarty模板基础----缓存数据

    缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存 通过一个例子来书写:缓存数据 一.书写php和html页面的基本功能 既然是用smarty模板,那么前端和后端要分开写了 (1)php页面 1 2 ...

  7. 命名空间namespace、smarty使用(视图分离,MVC)、smarty模板语法、smarty缓存、MVC模式

    一.命名空间:namespace 命名空间 可以理解为逻辑上的使用,为了防止重名 namespace :关键字 加载:require_once();//加载一次 include_once() 申明命名 ...

  8. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  9. smarty模板原理

    smarty模板原理   模板主要是用来让前端和后端分离的,前台页面只是一个前台页面,后台页面用php代码写逻辑,写完逻辑拿到前台显示. 一.写法 一般需要以下:写3个页面: 1.显示页面aa.htm ...

随机推荐

  1. sublime text3中成功使用bootstrap3

    在视图这里卡了挺久的,一直是自己在研究.其实自己有一个坏毛病,遇到问题,在网上搜集下找不到便寻求帮助(大多数是求助无效果,因为自己也没搞懂), 这时候自己就会懈怠一会,然后隔一两天心血起伏后便又继续干 ...

  2. AC日记——数据流中的算法 51nod 1785

    数据流中的算法 思路: 线段树模拟: 时间刚刚卡在边界上,有时超时一个点,有时能过: 来,上代码: #include <cstdio> #include <cstring> # ...

  3. VS2017使用

    1. 用了一段时间的layui,发现官网的升级的功能很好用,于是把自己本地项目的layui升级到的高版本.按照官网上的代码几乎一模一样,但是功能就是出不来,之后发现本地虽然是高版本但是生成的脚本依然是 ...

  4. 初探ggplot2 geom__制作面积图

        大家大概都对如下信息图并不陌生,该图用100%堆积面积图的方式来表现不同时期不同国家人数所占的比例.这是一种很有意思的表达方式,而面积图也是很常用的数据图表,现在让我们一起来看看如何在R里用g ...

  5. jquery_final

    第一章 jquery入门 1,jquery的引入 <script type="text/javascript" src="js/jquery-3.3.1.min.j ...

  6. new子类会先运行父类的构造函数

    发现子类构造函数运行时,先运行了父类的构造函数.为什么呢? 原因:子类的所有构造函数中的第一行,其实都有一条隐身的语句super(); super(): 表示父类的构造函数,并会调用于参数相对应的父类 ...

  7. SuperIndicator 一个专用打造轮播的类库

    Github地址:https://github.com/hejunlin2013/SuperIndicator,欢迎fork,star.著名Android-Universal-Image-Loader ...

  8. Android Spinner In Toolbar

    As the title of the post suggest in this tutorial we will see how to have spinner widget inside the ...

  9. DEDECMS图片集上传图片出错302的解决办法

    无忧主机(www.51php.com)小编今天在调试dede网站的时候发现了一个问题,因为小编想在网站上增加一个图片集的栏目,于是就到后台图片集栏目去添加内容,谁知在上传图片的时候给我弹出个错误信息框 ...

  10. DotnetBrowser入门教程-(3)启动与使用简单的WebSocket服务

    websocket是个很好的通信协议,基本可以贯穿支持html5的所有设备.dotnetbrowser内置了对websocket服务端与客户端的支持.请看例子: 1.新建桌面项目,基于.net 4.0 ...