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

缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存

通过一个例子来书写:缓存数据

一、书写php和html页面的基本功能

既然是用smarty模板,那么前端和后端要分开写了

(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秒后失效

这是第二个页面,刚开始没有缓存文件,所以会有####

随便点一页,回来后就是有了缓存文件,所以没有了###

后面的也是一样的~~~

时间: 2024-10-05 23:37:26

smarty模板基础3 *缓存数据*的相关文章

Smarty 模板引擎下缓存设置

缓存:就是将用户重复使用的内容进行缓存生成HTML内容. 缓存类型 全局缓存: 将整个页面内容都生成静态内容. Cache_dir: 缓存目录配置 Cache_lifetime:缓存的有效周期 Cacheing:设置是否开启缓存 局部缓存: 控制整个页面中的某个内容缓存,或者某个内容不缓存. insert函数调用的内容不缓存: 定义insert类型的函数: Smarty 2.x版本: Function insert_插件名(参数列表){ 功能代码 } Smarty 3.x版本: Function

smarty模板基础1

smarty模板的作用可以让前端和后端分离(也就是前端的显示页面和后端的php代码). smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.inc.php这是入口文件(3)plugins:自己写的插件文件夹(4)templates_c:存放编译好的文件(5)int.inc.php这是入口文件(6)定义好常量:不能修改 一.如何实现前后分离的原理:核心是一个类1.左分隔符{2.右分隔符}3.数组(默认空数组):存储变量 4.提供一个方法:向模

smarty模板基础

smarty模板的作用可以让前端和后端分离(也就是前端的显示页面和后端的php代码). smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.inc.php这是入口文件(3)plugins:自己写的插件文件夹(4)templates_c:存放编译好的文件(5)int.inc.php这是入口文件(6)定义好常量:不能修改 一.如何实现前后分离的原理:核心是一个类1.左分隔符{2.右分隔符}3.数组(默认空数组):存储变量 4.提供一个方法:向模

smarty模板引擎对各种数据的基本操作

我们都知道smarty是用来写模板的,但是写入模板的数据可以大致的分为这么几种: 整数 小数 字符串 布尔值 数组(一维索引,一维关联数组,二维数组,二维关联数组等) 对象. 下面是我的实例代码,对每一种变量类型都有测试: <?php require_once './libs/Smarty.class.php'; $smarty=new Smarty(); $smarty->left_delimiter="<{"; $smarty->right_delimite

smarty模板基础2

Smarty自带了一些内置函数,这些内置函数是Smarty模板引擎的组成部分.他们被编译成相应的内嵌PHP代码,以获得最大性能. 您创建的自定义函数不能与内置函数同名,也不必修改这些内置函数. 其中一些具有assign属性,用来收集函数结果,并将结果分配给一个命名的模板变量,而不是将内容输出,类似于{assign}函数. 一.{if}{elseif}{else} 条件 随着一些特性加入到模版引擎,Smarty的{if}语句与php的if语句一样富有弹性.每一个{if}必须与一个{/if}成对出现

smarty模板基础知识

1.定义 Smarty是一个使用php写出来的模板引擎,它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与html代码混杂在一起PHP代码逻辑分离. 简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要. 2. <?php class Smarty { public $left="{"; //左分割符 public $righ

smarty模板基础(部分转)

首先需要建一个smarty的类文件.php <?php class smarty { public $left = "{";//左分隔符 public $right = "}";//右分隔符 public $arr = array(); //存储变量 //向模板里面注册变量 function assign($key,$value) { $this->arr[$key] = $value; } //显示模板 function display($name)

smarty模板引擎(一)基础知识

一.基本概念 1.什么是mvc? mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty? smarty是一个php的模板引擎.更明确的来说,它可以帮助开发者更好的分离程序逻辑和页面显示. 3.smarty运行原理 模板文件,就是一个显示数据的模板,其中需要显示的数据用占位符代替. smarty运行时,会读取模板文件,将模板文件中的占位符替换成真正的数据,并输出一个处理后的php文件,交由服务器运行. 二.自己写一个smarty模板 为了更好的理解

smarty模板引擎基础(二)

smarty模板引擎所需文件夹共可分为存放页面缓存的(cache).存放配置文件的(configs).存放模板扩充插件的(plugins).存放模板文件的(templates).存放编译后的模板文件的(templates_c).存放后端程序代码的(main); 一.configs文件夹:即保存一些与页面配置有关的相关代码,可以用[]来进行模块分类 ,以conf格式保存,可用记事本打开查询,在页面中的调用指令为 <{config_load file='文件名' section="模块名&qu