smarty模板引擎(一)基础知识
<?php
require_once './cls_MiniSmarty.php';
$miniSmarty = new MiniSmarty();
//传递数据
$miniSmarty->assign("title","hello minismarty!");
$miniSmarty->assign("content","<font color='red'>this is content!</font>");
//传递数据到哪个页面显示
$miniSmarty->display("intro.tpl");
?>
3.编写intro.tpl文件
<!--这是个模板文件-->
<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="PHPEclipse 1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>{$title}</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99">
{$content}
</body>
</html>
<?php
/**
*
* 原本是通过smarty模板引擎给模板提供数据的
* 如今自己模仿写一个模板,给模板提供数据的类
* smarty执行时,读取模板文件,将模板文件替换成可执行的php文件。server真正执行的文件是处理后的文件。
*/
class MiniSmarty {
//模板文件路径
var $template_dir = "./templates/";
//模板文件被替换后的文件路径
var $templates_c_dir = "./templates_c/";
//存放变量值
var $tpl_vars = array ();
//主要模拟2个方法
/**
* 加入数据
* 參数1:键
* 參数2:值,默觉得null
*/
function assign($tpl_var, $var = null) {
if ($tpl_var != '') {
$this->tpl_vars[$tpl_var] = $var; //将数据加入到数组中
}
}
/**
* 显示数据
* 參数1:显示到哪个模板文件里
*/
function display($tpl_file) {
//获得模板文件的路径
$tpl_file_path = $this->template_dir . $tpl_file;
//获得模板文件被编译后的文件路径
$compile_file_path = $this->templates_c_dir . "com_" . $tpl_file . ".php";
//推断文件是否存在
if (!file_exists($tpl_file_path)) {
return false;
}
//不用每次都生成编译文件,仅仅有编译文件不存在或者模板文件被改动了才生成新的编译文件
//相当于缓存了编译文件
//filemtime函数:获得文件的生成时间
if (!file_exists($compile_file_path) || filemtime($tpl_file_path) > filemtime($compile_file_path)) {
//读取模板文件的内容
$fpl_file_content = file_get_contents($tpl_file_path);
$newStr = myReplace($fpl_file_content);
//将替换后的字符串生成新的文件,也就是编译后的文件
file_put_contents($compile_file_path, $newStr);
}
//引入编译后的文件
include $compile_file_path;
}
/**
* 对模板文件里的内容进行替换,获得新的字符串
*/
function myReplace($fpl_file_content) {
$pattern = array (
'/\{\s*\$([a-zA-Z_][a-zA-Z0-9_]*)\s*\}/i'
);
$replace = array (
'<?php echo $this->tpl_vars["${1}"] ?>'
);
$newStr = preg_replace($pattern, $replace, $fpl_file_content);
return $newStr;
}
}
?>
$smarty->right_delimiter=">}";
$smarty->cache_dir="./smarty_cache";//假设使用缓存的话:缓存的路径
smarty模板引擎(一)基础知识的更多相关文章
- smarty模板引擎基础(二)
smarty模板引擎所需文件夹共可分为存放页面缓存的(cache).存放配置文件的(configs).存放模板扩充插件的(plugins).存放模板文件的(templates).存放编译后的模板文件的 ...
- 前端学PHP之Smarty模板引擎
前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...
- PHP之Smarty模板引擎
前面的话 对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进. ...
- smarty模板引擎
1. 使用smarty 1.1 项目引入 // 3, 连接数据库,提取相关数据 $title = "Smarty模板引擎"; $content = "Smarty模 ...
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...
- 深入浅出之Smarty模板引擎工作机制(二)
源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解. Smarty模板引擎的原理,其实是这么一个过程: ...
- 深入浅出之Smarty模板引擎工作机制(一)
深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解. ...
- Smarty模板引擎技术二
Smarty模板引擎技术 内建函数 include_php内建函数 作用:载入一个php文件,将载入的文件的内容赋值给一个变量 注意:该内建函数只能在2.0中使用,如果使用的话,必须得实例化Sma ...
- Smarty模板引擎技术
Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...
随机推荐
- python中的装饰器decorator
python中的装饰器 装饰器是为了解决以下描述的问题而产生的方法 我们在已有的函数代码的基础上,想要动态的为这个函数增加功能而又不改变原函数的代码 例如有三个函数: def f1(x): retur ...
- 【Round #36 (Div. 2 only) C】Socks Pairs
[题目链接]:https://csacademy.com/contest/round-36/task/socks-pairs/ [题意] 给你n种颜色的袜子,每种颜色颜色的袜子有ai只; 假设你在取袜 ...
- HDU 5391-Zball in Tina Town(数论)
题目地址:pid=5391">HDU 5391 题意: Tina Town 是一个善良友好的地方,这里的每个人都互相关心.Tina有一个球,它的名字叫zball. zball非常奇妙, ...
- hdoj-1164-Eddy's research I【分解质因数】
Eddy's research I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- Oracle数据库备份恢复,巡检须要关注的对象设置以及相关恢复概述
数据库备份恢复.巡检须要关注的对象设置: 1.数据库名称,以及DBID: --dbid在v$database中 SYS@ORCL>select dbid,name from v$dat ...
- JSP编程技术5-购物车的实现-session会话对象
首先十分感谢大家对我的文章的支持,我是个刚刚才找到自己方向的在校大学生,当然我的知识和能力有限,眼下正在努力恶补学习中.当我看到自己首次发表到CSDN首页的文章才几个小时阅读量就超过了100时,对我来 ...
- 动态网页爬取样例(WebCollector+selenium+phantomjs)
目标:动态网页爬取 说明:这里的动态网页指几种可能:1)须要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成.如一个html里有<div id="test" ...
- [UOJ#334][NOIP2017]列队 平衡树/线段树/树状数组
题目链接 题意不说了,一辈子也忘不掉 解法1.平衡树 这题就是平衡树裸题,每一行开一棵维护前 \(m-1\) 个,最后一列单独维护,因为很多人没有用到,所以平衡树每个节点是一个区间(pair),分裂时 ...
- xml Data Type Methods in sql server
nodes() Method (xml Data Type) https://docs.microsoft.com/en-us/sql/t-sql/xml/nodes-method-xml-data- ...
- Linux桌面词典 星际译王(StarDict)
星际译王(StarDict)是利用GTK(GIMP TOOLKIT)开发的国际化的.跨平台的自由的桌面字典软件.它并不包含字典档,使用者须自行下载配合使用.它可以运行于多种不同的平台,如Linux, ...