用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化

tpl.class.php主要解析

assign 方法实现

/**

* 模板赋值操作

* @param mixed $tpl_var 如果是字符串,就作为数组索引,如果是数组,就循环赋值

* @param mixed $tpl_value 当$tpl_var为string时的值,默认为 null

*/

public function assign($tpl_var,$tpl_value=null){

if(is_array($tpl_var) && count($tpl_var) > ){

foreach ($tpl_var as $k => $v) {

$this->tpl_vars[$k] = $v;

}

}elseif($tpl_var){

$this->tpl_vars[$tpl_var] = $tpl_value;

}

}

fetch 方法实现

/**

* 生成编译文件

* @param string $tplFile 模板路径

* @param string $comFile 编译路径

* @return string

*/

private function fetch($tplFile,$comFile){

//判断编译文件是否需要重新生成(编译文件是否存在或者模板文件修改时间大于编译文件的修改时间)

if(!file_exists($comFile) || filemtime($tplFile) > filemtime($comFile)){

//编译,此处也可以使用ob_start()进行静态化

$content = $this->tplReplace(file_get_contents($tplFile));

file_put_contents($comFile, $content);

}

}

简单编译方法:按照规则进行正则替换

/**

* 编译文件

* @param string $content 待编译的内容

* @return string

*/

private function tplReplace($content){

//转义左右定界符 正则表达式字符

$left = preg_quote($this->left_delimiter,'/');

$right = preg_quote($this->right_delimiter,'/');

//简单模拟编译 变量

$pattern = array(

//例如{$test}

'/'.$left.'\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)'.$right.'/i'

);

$replace = array(

'<?php echo $this->tpl_vars[\'${1}\']; ?>'

);

//正则处理

return preg_replace($pattern, $replace, $content);

}

display = fetch+echo

/**

* 输出内容

* @param string $fileName 模板文件名

*/

public function display($fileName){

//模板路径

$tplFile = $this->template_dir.'/'.$fileName;

//判断模板是否存在

if(!file_exists($tplFile)){

$this->errorMessage = '模板文件不存在';

return false;

}

//编译后的文件

$comFile = $this->compile_dir.'/'.md5($fileName).'.php';

$this->fetch($tplFile,$comFile);

include $comFile;

}

其他属性

//模板文件存放位置

private $template_dir = 'templates';

//编译文件存放位置

private $compile_dir = 'compiles';

//左定界符

private $left_delimiter = '{';

//右定界符

private $right_delimiter = '}';

//内部临时变量,存储用户赋值

private $tpl_vars = array();

//错误信息

private $errorMessage = '';

/**

* 修改类属性的值

* @param array $configs 需要修改的相关属性及值

* @return bool

*/

public function setConfigs(array $configs){

if(count($configs) > ){

foreach ($configs as $k => $v) {

if(isset($this->$k))

$this->$k = $v;

}

return true;

}

return false;

}

测试

模板文件 testTpl.html

test_tpl_demo

{$name}:{$age}:{$message}

运行文件 test_tpl.php

require 'Tpl.class.php';

$tpl = new Tpl();

$tplarr = array(

'name'=>'waited',

'age'=>''

);

$tpl->assign($tplarr);

$tpl->assign('message','this is a demo');

$tpl->display('testTpl.html');

?>

输出:waited:100:this is a demo

生成编译文件:972fa4d270e295005c36c1dbc7e6a56c.php

Smarty模板引擎技术

Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...

2019-07-24 Smarty模板引擎的简单应用

smarty是什么? Smarty是一个使用PHP写出来的模板引擎,是业界最著名的PHP模板引擎之一.Smarty分离了逻辑代码和外在的内容,提供一种易于管理和使用的方法,用来将原本与HTML代码混杂 ...

Smarty模板引擎技术二

Smarty模板引擎技术 内建函数 include_php内建函数 作用:载入一个php文件,将载入的文件的内容赋值给一个变量   注意:该内建函数只能在2.0中使用,如果使用的话,必须得实例化Sma ...

【原创】javascript模板引擎的简单实现

本来想把之前对artTemplate源码解析的注释放上来分享下,不过隔了一年,找不到了,只好把当时分析模板引擎原理后,自己尝试 写下的模板引擎与大家分享下,留个纪念,记得当时还对比了好几个模板引擎来着 ...

SpringBoot静态资源访问&plus;拦截器&plus;Thymeleaf模板引擎实现简单登陆

在此记录一下这十几天的学习情况,卡在模板引擎这里已经是四天了. 对Springboot的配置有一个比较深刻的认识,在此和大家分享一下初学者入门Spring Boot的注意事项,如果是初学SpringB ...

Thymeleaf 模板引擎技术

引入Thymeleaf: 我是一只小狗,今年岁."; var data = { name:'旺财 ...

php模板引擎

http://baike.baidu.com/link?url=HmXfdJBv3zpCdnZPeaSmZmqDBHlyTBnz9Rmb5it-jf1_NLHfaku6_i8ssUYbnaTQEBD4 ...

php Smarty模板引擎配置与测试

Smarty简介 smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用PHP程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页 ...

随机推荐

WebAPI接口返回ArrayList包含Dictionary对象正确解析

一.问题提出 为了减少流量,将key-value(键值对)直接输出到Dictionary,接口返回结果如下: 其中{}里面内容如下: 上图显示600是键,4 ...

惊涛怪浪&lpar;double dam-break&rpar; -- position based fluids

切入正题之前,先胡说八道几句.    据说爱因斯坦讲过:关于这个世界最难以理解的就是它是可以被理解的.人类在很长的时间里,都无法认知周围变幻莫测的世界,只能编造出无数的神祗来掌控世上万物的运行.到了近 ...

js去掉所有空格

Python2&period;x的编码问题

1. 计算机编码历史 ASCII Python的默认编码,其是一种单字节的编码.刚开始计算机世界里只有英文,而单字节可以表示256个不同的字符.最开始ASCII只定义了128个字符编码,包括96个文字 ...

4&period;app是怎么炼成的

很多刚进入app后端的小伙伴,有的是之前没有接触过这个行业,有的是只在学校学习了基本的技术知识,不知道开发app的整个流程是怎么样的,因此心里会有一股恐惧.听着别人口中的一大串app相关的术语,也不知 ...

L2-2 重排链表 (25 分&rpar;

给定一个单链表 L​1​​→L​2​​→⋯→L​n−1​​→L​n​​,请编写程序将链表重新排列为 L​n​​→L​1​​→L​n−1​​→L​2​​→⋯.例如:给定L为1→2→3→4→5→6,则输出 ...

MFC之菜单

1菜单与菜单项的操作 //获取菜单指针----CWnd::GetMenu() //GetSubMenu()获取子菜单 /CheckMenuItem()加入/取消标记 GetMenu()->Get ...

ArcGIS Engine Maplex Label(标注)使用一例(转&rpar;

/// /// MaplexEngine标注 /// ///

php模板引擎如何实现,php模板引擎技术简单实现相关推荐

  1. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)

    前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎.今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是 ...

  2. 使用 .NET Core模板引擎创建自定义的模板和项目

    本文要点 .NET CLI 包含了一个模板引擎,它可以直接利用命令行创建新项目和项目项.这就是"dotnet new"命令. 默认模板集涵盖了默认控制台和基于 ASP.NET 的应 ...

  3. 自定义 Javascript 模板规则,打造轻量级模板引擎

    直接贴 TemplateHelper 代码了: var TemplateHelper = {englishChars: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",b ...

  4. php模板引擎如何实现,PHP模板引擎如何实现

    假设使用标签形式作为模板语法 在解析环节我想到两种实现方式 1. 利用正则获取标签内容,然后将标签进行规则性的替换并使用eval进行解析,解析完成后再用正则进行替换 2. 利用正则获取标签内容,然后将 ...

  5. twig模板引擎使用php,Twig模板引擎

    使用Twig Twig是一个灵活,快速,安全的PHP模板语言.它将模板编译成经过优化的原始PHP代码.Twig拥有一个Sandbox模型来检测不可信的模板代码.Twig由一个灵活的词法分析器和语法分析 ...

  6. 模板引擎ejs与html,后台模板引擎ejs与前台模板引擎artTemplate的简单介绍

    动态网页是指前端页面当中的数据内容来源于后台数据库,前端的html代码会随着后台数据的变化而变化,是动态生成的.制作动态网页有两种方式,一种方式是在后台拿到前端的html模板,利用后台模板引擎(如ej ...

  7. 什么是模板引擎?常见的模板引擎有哪些?Thymeleaf的常用指令介绍。

    1.模板引擎是什么? 模板引擎是以业务逻辑层和表现层分离为目的的,将规定格式的模板代码转换为业务数据的算法实现. 它可以是一个过程代码.一个类,甚至是一个类库.不同的模板引擎其功用也不尽相同,但其基本 ...

  8. php中smarty末班引擎,php之smarty模板引擎

    前面的话 对PHP来说,有很多模板引擎可供选择,但是一个使用PHP编写出来的,是业界最著名.功能最强大的一种PHP模板引擎.像PHP一样拥有丰富的函数库,从统计字数到自动缩进.文字环绕以及正则表达式都 ...

  9. 什么是模板引擎?常见的模板引擎有哪些?thymeleaf的常用指令介绍

    一.模板引擎概念 模板引擎是为了解决用户界面(显示)与业务数据(内容)分离而产生的. 它可以生成特定格式的文档,常用的如格式如HTML.xml以及其他格式的文本格式.其工作模式如下: 举个例子,我想买 ...

最新文章

  1. RTOS诊断和错误检查
  2. vant ui wepy_UI设计需要学习什么软件呢?
  3. 基于框架编写驱动代码
  4. java好学吗谁学过说话,最全Java知识总结
  5. 联想微型计算机ai0,联想baby AI
  6. python处理点云数据_点云数据处理知识讲解
  7. php开发oa系统的插件下载不了,OA系统安装不了office控件的解决方法
  8. 怎么批量遮挡视频素材上的平台水印
  9. 海康威视Linux下SDK开发(Ubuntu16.04 QT5.10)
  10. 《图算法》第五章 中心性算法-2
  11. php excel导入读取公式本身不计算,使用PHPExcel读取Excel文件时忽略计算值
  12. 批量Word转换成PDF,用这方法超简单
  13. 学生用计算机的感叹号在哪,感叹号怎么打电脑(感叹号的用法及举例)
  14. 有域名和服务器怎么建设网站新手,新手如何快速搭建一个新的网站【零基础】...
  15. LaTeX调整enumerate的间距
  16. PDF转换成word免费
  17. 2020年薪酬排行榜为何程序员遥遥领先?
  18. 股指期货策略精选合集
  19. mysql重复写入_MYSQL避免重复插入记录的三种方法
  20. Tikz教程:一个异步FIFO设计步骤示意图的画法

热门文章

  1. 茅台App首发就登顶!单日下载量43万,甚至还没开始试运行
  2. 全网第一SoTA成绩却朴实无华的PyTorch版EfficientDet
  3. 一群猥琐至极的大学舍友,我有点想你们了...附骚图
  4. 三国时期,假如曹操是一名程序员,历史会发生什么?--文末送书
  5. 使用bottle进行web开发:get的参数传递,form数据传递等
  6. python之链表、单链表、双向链表、单向循环链表
  7. 网络工程师_TCP握手之类的
  8. 【好资源】473页斯坦福数学基础:《应用线性代数》(附pdf和ppt下载)
  9. egg(113)--egg之登录成功跳转到登录之前的页面
  10. JavaScript 复制对象与Object.assign方法无法实现深复制