【smarty项目源码】模拟smarty模版文件的解析过程

[php] view plaincopy

  1. <?php
  2. class MyMiniSmarty{
  3. //模版文件的存放路径
  4. var $template_dir="./templates/";
  5. //编译文件的存放路径 ,编译文件的名称格式暂定为:com_对应的tpl.php
  6. var $complie_dir="./templates_c";
  7. //模版变量数组:存放所有模版变量的值
  8. var $tpl_vars=array();
  9. //这里我们主要模拟两个方法
  10. //参数1-模版变量     参数2:模版变量的值
  11. function assign($tpl_var,$val=null){
  12. if($tpl_var!=‘‘){
  13. $this->tpl_vars[$tpl_var]=$var;
  14. }
  15. }
  16. //这里编写display
  17. //参数1-要显示的模版文件名
  18. function display($tpl_file){
  19. //模版文件的路径
  20. $tpl_file_path=$this->template_dir.$tpl_file;
  21. //编译文件的命名及路径
  22. $complie_file_path=$this->complie_dir."com_".$tpl_file.".php";
  23. //判断当前模版文件是否存在
  24. if(!file_exists($tpl_file_path)){
  25. //如果当前模版文件不存在,则返回false
  26. return false;
  27. }
  28. //查看是否有编译文件,如果没有编译文件,或者说模版文件的修改时间大于编译文件的生成时间,则需要重新编译
  29. if(!file_exists($comlie_file_path) ||filemtime($tpl_file_path)>filemtime($complie_file_path)){
  30. //获取模版文件的内容
  31. $tpl_file_content=file_get_contents($tpl_file_path);
  32. //这里我们的核心是怎样把tpl转化为php文件
  33. $pattern=array(
  34. //1.\{ - 转义{ 左括号 2.\s* - 代表一个或多个空格 3.\$ - 转义$符号  4.\} - 转义 } 右括号
  35. ‘/\{\s*\$([a-zA-Z][a-zA-Z0-9]*)\s*\}/i‘
  36. );
  37. $replace=array(
  38. ‘<?php echo $this->tpl_vars["${1}"] ?>‘
  39. );
  40. //将类似 {$title}替换为<?php echo $this->tpl_vars["title"] ? >,返回替换后的字符串
  41. $new_str=preg_replace($pattern,$replace,$tpl_file_content);
  42. //编译文件的生成:将正则替换后的模版文件中的内容写入到编译文件
  43. file_put_contents($complie_file_path,$new_str);
  44. }
  45. //如果存在编译文件并且模版文件没有改动,则直接引入编译文件
  46. include $complie_file_path;
  47. }
  48. }
  49. ?>

注意:对象也可以作为模版变量

案例:

php文件:

$smarty=new Smarty();
$var1=“简单字符串”;
$var2=new 对象名();
$var3=array(内容列表..);
$smarty->assign(“var1”,$var1);
$smarty->assign(“var2”,$var2);
$smarty->assign(“var3”,$var3);

模版文件:

取出 var1 对应的值:  {$var1}<br/>
取出 var2 对应的值:  {$var2->属性或者方法}
取出 var3 对应的值: {$var3[下标]}

时间: 2024-10-25 19:32:16

【smarty项目源码】模拟smarty模版文件的解析过程的相关文章

unity3d 项目源码下载链接

2-1 炉石传说 客户端加服务器端 链接:http://pan.baidu.com/s/1dDKY3Fr 密码:c03q 2-2 新仙剑奇侠传 链接:http://pan.baidu.com/s/1b4QVqI 密码:dic5 2-3 unity3d 战斗卡牌<变身吧主公>客户端+服务器源码 链接:http://pan.baidu.com/s/1kUpot51 密码:i02u 2-4 降临OL-U3D全套源码 链接:http://pan.baidu.com/s/1sktLQ5v 密码:we0g

2016年最牛逼的分类Android项目源码免费一次性打包下载!

之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被我分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是我一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不要一分钱!最看不起那些挂羊头卖狗的)你可以在本帖里面按Ctrl+F查找你需要的关键字,

【10.23更新】 程序员新手福利来了,Android项目源码集合,持续更新。。。

拼图游戏 使用服务:玩编程 功能分类:休闲游戏 支持平台:Android 运行环境: Android 开发语言:Java 开发工具:Eclipse 源码下载地址 :http://www.devstore.cn/code/info/259.html 拼图游戏运行界面: 仿糗事百科Android客户端源码 功能分类:社交            支持平台:Android 运行环境:Eclipse       开发语言:Java 开发工具:Eclipse        源码大小:4.62MB 源码下载地

Java SSM 商户管理系统 客户管理 库存管理 销售报表 项目源码

需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家也不能实时了解下面代理商的经营状况和库存情况 解决方案: 本系统角色主要分两个层级:总管理(厂家),下级管理(商户) 各商户管理自己的进销存数据和客户资料 厂家能查看所有商户实时经营情况 --------------------------------------------------------

Java商户管理系统 客户管理 库存管理 销售报表 SSM项目源码

需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家也不能实时了解下面代理商的经营状况和库存情况 解决方案: 本系统角色主要分两个层级:总管理(厂家),下级管理(商户) 各商户管理自己的进销存数据和客户资料 厂家能查看所有商户实时经营情况 --------------------------------------------------------

java 库存 进销存 商户 多用户管理系统 SSM springmvc 项目源码

需求分析: 有个厂家,下面有很多代理商(商户或门头等),之前商户进货.库存.销售.客户资料等记录在excel表格中 或者无记录,管理比较混乱,盈利情况不明.不能有效了解店铺经营情况和客户跟踪记录 厂家也不能实时了解下面代理商的经营状况和库存情况 解决方案: 本系统角色主要分两个层级:总管理(厂家),下级管理(商户) 各商户管理自己的进销存数据和客户资料 厂家能查看所有商户实时经营情况 --------------------------------------------------------

MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

先来张在路上-- 此项目是用Maven创建的,没有使用Maven的,自己百度.谷歌去:直接用Junit测试就行,先执行里面的save方法,添加10000条测试数据提供各种聚合查询等. 废话不多说,上干货-- 一.MongoDB数据库的配置(mongodb.xml) 以下是我自己的配置,红色字体请改为自己本机的东东,你说不懂设置端口,不会创建数据库名称,不会配置用户名密码,那有请查阅本系列的第4节(MongoDB的使用学习之(四)权限设置--用户名.密码.端口==),你说懒得设置,那就@#¥%--

搜集的一些项目源码,改改就能用

UE4项目源码:房地产样板间4 http://www.52vr.com/thread-31714-1-1.html UE4项目源码:VR样板间案例,包括布料木料玻璃等 http://www.52vr.com/thread-31713-1-1.html UE4项目源码:室内互动环境资源,项目文件 http://www.52vr.com/thread-31712-1-1.html UE4项目源码:室内场景 http://www.52vr.com/thread-31711-1-1.html UE4项目

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载

SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 这篇博文我们通过spring与Mybatis集成,开发一个简单用户增删改查的Web项目. 基本准备工作 1.安装JDK1.6以上版本,安装与配置 2.下载mybatis-3.2.0版:https://repo1.maven.org/maven2/org/mybatis/mybatis/ 3.下载mybatis-spring-1.2.1版:https://repo1.maven.org/maven2/org/m