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

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

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

Smarty的应用的更多相关文章

  1. Smarty的基本使用与总结

    含义: Smarty是PHP的一个引擎模板,可以更好的进行逻辑与显示的分离,即我们常说的MVC,这个引擎的作用就是将C分离出来. 环境需求:PHP5.2或者更高版本 我使用的环境是:PHP5.3,wi ...

  2. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  3. smarty使用

    smarty-牛刀小试 smarty 初识 官网 http://www.smarty.net/ Smarty is a template engine for PHP(PHP模板引擎) smarty使 ...

  4. Smarty模版引擎的原理

    Smarty是一个使用php写出来的模版引擎,用来将原本与html代码混杂在一起PHP代码逻辑分离,实现前后端分离. Smarty模板优点: 1. 速度:采用Smarty编写的程序可以获得最大速度的提 ...

  5. 12月15日下午Smarty模板函数

    1.{$var=...} 这是{assign}函数的简写版,你可以直接赋值给模版,也可以为数组元素赋值. <{$a = 10}><!--赋值语句--> <{$a}> ...

  6. 12月15日smarty模板基本语法

    smarty基本语法: 1.注释:<{* this is a comment *}>,注意左右分隔符的写法,要和自己定义的一致. <{* I am a Smarty comment, ...

  7. 12月13日上午Smarty模版原理

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

  8. SMARTY模板中如何使用get,post,request,cookies,session,server变量

    {$smarty}保留变量不需要从PHP脚本中分配,是可以在模板中直接访问的数组类型变量,通常被用于访问一些特殊的模板变量.例如,直接在模板中访问页面请求变量.获取访问模板时的时间戳.直接访问PHP中 ...

  9. 在新浪云SAE中使用smarty引擎模版

    在新浪云上使用smarty时会发现又这样的错误信息: “SAE_Fatal_error: Uncaught exception 'SmartyException' with message 'unab ...

  10. MVC架构学习之Smarty学习——病来而蔫

    前两天是五一小长假,而每次假期都想着如何如何刻苦一番,往往是自作多情.. 当然这次是有小病在身,多个借口吧. 一有病就蔫的不行...要锻炼了啊,脚估计也差不多了,游泳试试吧这周. 这次学习Smarty ...

随机推荐

  1. android深入之设计模式(一)托付模式

    (一)托付模式简单介绍 托付模式是主要的设计模式之中的一个.托付.即是让还有一个对象帮你做事情. 更多的模式,如状态模式.策略模式.訪问者模式本质上是在更特殊的场合採用了托付模式. 托付模式使得我们能 ...

  2. iOS tableview cell 的展开收缩

    iOS tableview cell 的展开收缩 #import "ViewController.h" @interface ViewController ()<UITabl ...

  3. beego1---beego,bee环境配置

    1.配置环境变量GOPATH(代码路径,先在里面建立src,pkg,bin3个目录),GOROOT:go安装的目录,go安装目录下的bin目录放到Path环境变量. 安装完bee工具之后,bee 可执 ...

  4. 经典的printk 写法

    经典的printk 写法: printk("[lynn--%s@%d]: addr:0x%x  \n",__func__,__LINE__,obj->client->a ...

  5. 使用Zabbix监控ZooKeeper服务的健康状态

    一 应用场景描述 在目前公司的业务中,没有太多使用ZooKeeper作为协同服务的场景.但是我们将使用Codis作为Redis的集群部署方案,Codis依赖ZooKeeper来存储配置信息.所以做好Z ...

  6. ubuntu将mysql、nginx添加到环境变量中

    vim /etc/profile 添加 export PATH="$PATH:/usr/local/mysql/bin" export PATH="$PATH:/usr/ ...

  7. Mac os x下配置 Android ndk 开发环境

    1.阅读下面之前,请确保你android sdk的开发环境已经搭建好,ADT也最好是目前最新的. 2.到http://developer.android.com/tools/sdk/ndk/index ...

  8. 【HDU 1005】 Number Sequence

    [题目链接] 点击打开链接 [算法] 矩阵乘法快速幂,即可 [代码] #include<bits/stdc++.h> using namespace std; int a,b,n; str ...

  9. 杂项-DB:Druid

    ylbtech-杂项-DB:Druid Apache Druid (incubating) is a high performance analytics data store for event-d ...

  10. bzoj3786

    splay维护dfs序 我们发现有移动子树这种操作,树剖是做不了了,又要实现子树加,lct又维护不了了,这时我们用splay维护入栈出栈序来支持这些操作.我们记录每个点的入栈时间和出栈时间,这样一个闭 ...