首先先建立两个文件夹,一个temp,存储编译前的文件,一个comp,存储编译后的文件,编译前的文件使用{$title}代替<?php echo $title; ?>,然后将前者编译成后者再解析,解析后存储在comp文件夹中

定义一个解析类smarty.class.php

<?php

//定义一个简单的smarty类,来编译html文件
class mini{
public $temp_uri='';//模板文件所在的位置
public $comp_uri='';//模板编译后存放的位置
public $_var=array();//变量数组 public function assign($key,$value){
$this->_var[$key]=$value;
} public function display($temp){//封装
$uri=$this->complie($temp);
require($uri);
}
/*
String $tempplate模板文件名
return String
*/
public function complie($temp){
//读出模板的内容
$te=$this->temp_uri.'/'.$temp;//编译前的文件
$source=file_get_contents($te);
$comp='./comp/'.$temp.'.php'; //判断这个文件是否是存在
if(file_exists($comp)&&filemtime($comp)>filemtime($te)){//编译后文件存在并且还要这个保存要比编译前的文件保存的早
return $comp; } $source=str_replace('{$', '<?php echo $this->_var[\'', $source);
$source=str_replace('}', '\'];?>', $source); var_dump(file_put_contents($comp,$source));
return $comp;
}
} ?>

在temp目录下的编译前文件01temp.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{$title}</title>
</head>
<body>
下面是php模板的内容<br/>
{$content}
</body>
</html>

控制页面01.php

<?php

require('./smarty.class.php');
$title='商城';
$content='这是我的商城哦';
$smarty=new mini();
$smarty->temp_uri='./temp';
$smarty->comp_uri='./comp';
// $smarty->complie('01temp.html');
$smarty->assign('title',$title);
$smarty->assign('content',$content);
$smarty->display('01temp.html');
?>

运行01.php生成在comp目录下的编译后文件01temp.html.php

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title><?php echo $this->_var['title'];?></title>
</head>
<body>
下面是php模板的内容<br/>
<?php echo $this->_var['content'];?>
</body>
</html>

达到正确的结果

编辑一个小的smarty类的更多相关文章

  1. 用CIL写程序:定义一个叫“慕容小匹夫”的类

    前文回顾: <用CIL写程序:你好,沃尔德> <用CIL写程序:写个函数做加法> 前言: 今天是乙未羊年的第一天,小匹夫先在这里给各位看官拜个年了.不知道各位看官是否和匹夫一样 ...

  2. Java类的继承与方法调用的一个小问题

    public class Father { protected void server(int i){ switch (i){ case 1: methodone(); break; case 2: ...

  3. 1.类的加载机制_继承类的加载(一个小的Demo)说明

    今天我们先来一个小的Demo来了解类的加载顺序. public class ClassLoaderTest { public static void main(String[] args) { Sys ...

  4. jQuery 二级菜单,一次显示一个小类 鼠标点击显示小类

    jQuery 二级菜单,一次显示一个小类 鼠标点击显示小类 本例有另外2个关联案例,演示地址分别为2.php,3.php 演示 XML/HTML Code <div class="ar ...

  5. 【开源一个小工具】一键将网页内容推送到Kindle

    最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会. 工具名称:Simple Send to Kindle Github地址:https://github.com/zh ...

  6. 定一个小目标:明年1024能成功转行web前端,光荣地成为一个程序员!

    第一次在博客园写博,我为什么要选择这里吗? 据说博客园这里的IT大牛如云,作为一个求知若渴的小白,我屁颠屁颠的跟着过来了. 于是今天早上兴高采烈的注册了账号,迫不及待的打开我的博客,呃!注册账号成功了 ...

  7. 关于SVN配置文件的一个小例子

    1   背景假设 厦门央瞬公司是一家电子元器件设备供应商,其中有个ARM部门,专门负责ARM芯片的方案设计.销售,并在北京.上海各设立了一个办事处.对于工作日志,原先采用邮件方式发给经理,但是这种方式 ...

  8. UniversalImageLoader的一个小问题

    最近在使用UniversalImageLoader时遇到了一个小问题,多个地方同时通过ImageLoader.getInstance().loadImage(url, new ImageSize(dp ...

  9. 与大家分享robotium一个小问题。Test run failed:Instrumentation run failed due to 'java.lang.ClassNotFoundException'

    今天和大家分享robotium一个小问题. 我们在运行自已经搭好的框架时,有可能会出现一个找不到类的错误(如上图所示). 问题是重签名工具给出的activity有误,这时我们可以用Appt命令查看重签 ...

随机推荐

  1. mvc5 HTML Helper

    转自:http://www.cnblogs.com/CodeFox/p/3782535.html 提及到HTML helper大家肯定不应该陌生, 因为在书写MVC View的时候肯定需要使用到它.一 ...

  2. 50道经典的JAVA编程题(46-50)

    50道经典的JAVA编程题(46-50),最后五道题了,这是一个美妙的过程,编程真的能让我忘掉一切投入其中,感觉很棒.今天下午考完微机原理了,大三上学期就这样度过了,这学期算是解放了,可是感觉我还是没 ...

  3. JAVA一个关于传递引用的测试

    以下测试主要为了说明:对传递对象或传递引用进行修改,对最终值的影响情况 public class PassTest {     @Before     public void setUp() thro ...

  4. 【现代程序设计】【homework-04】

    Personal Software Process Stages 时间百分比(%) 实际花费的时间 (分钟) 原来估计的时间 (分钟) 计划 0 0 0 ·           估计这个任务需要多少时 ...

  5. DTD - Attributes

    In a DTD, attributes are declared with an ATTLIST declaration. Declaring Attributes An attribute dec ...

  6. FreeModbus for stm32(Keil工程)——精简Modbus slave协议【worlsing笔记】

    FreeModbus For stm32:点击下载源码 1.测试环境Keil MDK 4.7a  stm32f103c8, PB12为输出线圈,    可以通过Modbus Poll来控制线圈的输出状 ...

  7. shell 检测ip的合法性与检测网络掩码的合法性

    有时我们需要检测IP输入的正确性与网络掩码的正确性,用shell脚本写的: #验证ip地址的正确性 check_ip_format() { echo $1 | grep "^[0-9]\{1 ...

  8. JS 实现地区,省份,城市,县区4级联动

    刚学JS,实战一下,做一个省份信息4级联动. 但是网上查了都是3级的,没有4级,现在做一个的是带地区的4级联动,最简单的办法是修改别人的代码,最开始找到的事类似于下边这个的: 省市县关联菜单 < ...

  9. css中文字体unicode对照表

    为什么要使用Unicode编码代替中文字体 在CSS中使用中文字体通常直接设置字体名称,比如设置字体为宋体:font-family:’宋体’:但因此产生的一个问题是,如果默认编码并不是UTF-8,这会 ...

  10. Attribute特性验证模型model

    数据验证我们往往分为前台验证和后台验证,而我们的后台验证每到一个方法中就要去验证一次,这样的代码想想都难以维护,这篇我们这篇文章就是为了解决这样的问题.用attribute 这个特性来解决这样的问题 ...