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项目的方式 //链接数 ...
随机推荐
- linux一个网卡添加多个虚IP
[root@localhost ~]# ifconfig bond0:0 10.0.0.202 netmask 255.255.255.255 broadcast 10.0.0.255 up 摘自:h ...
- python 异步IO-aiohttp与简单的异步HTTP客户端/服务器
参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143209814 ...
- 洛谷—— P2934 [USACO09JAN]安全出行Safe Travel || COGS ——279|| BZOJ——1576
https://www.luogu.org/problem/show?pid=2934 题目描述 Gremlins have infested the farm. These nasty, ugly ...
- python学习之--SyntaxError: Non-ASCII character '\xe5'
在安装好eclipse之后试了一下 创建了了一个pydev project package.module 在test.py中编写最简单的命令 print "helloworld" ...
- 记一次struts2漏洞修复带来的问题
struts2作为万年漏洞王,感觉已经被弃如敝屣了,除了一些古老的项目,比如我手上的一个项目,以前每次出现漏洞就如临大敌,手忙脚乱的赶在公司红头文件发出来前修复它.然后改了一两次后毅然决然用别的框架代 ...
- BZOJ2020: [Usaco2010 Jan]Buying Feed II
[传送门:BZOJ2020] 简要题意: 约翰开车回家,遇到了双十一节,那么就顺路买点饲料吧.回家的路程一共有E 公里,这一路上会经过N 家商店,第i 家店里有Fi 吨饲料,售价为每吨Ci 元.约翰打 ...
- 记录一下Memcached的用法:
首先就是先要配置Memcached,这个回头再写. https://zhidao.baidu.com/question/809745125827797732.html https://www.cnbl ...
- Linux常用视频播放器
1.SMplayer是一款跨平台的视频播放工具,可以支持大部分的视频和音频文件.它支持音频轨道切换.允许调节亮度.对比度.色调.饱和度.伽玛值,按照倍速.4倍速等多种速度回放.还可以进行音频和字幕延迟 ...
- 联想M4600 (110主板),安装正版win7 ,进入桌面后鼠标无法使用
问题:联想M4600 (110主板),安装正版win7 ,进入桌面后鼠标无法使用 原因: 110主板和win7系统问题,具体网上查询 处理: 修改bios 中 “USB Virtual KBS Sup ...
- nodeType 节点的类型
元素结点 1 属性结点 2 attributes 文本结点 3 注释结点 8 document结点 9 documentFragment 11 文档碎片