分享一个非常简单好用的php模板引擎

云平台

  因为最近准备开发一套php分布式系统,采用主配置文件通用,每个模块遵守开发规范独立开发,独立部署到服务器上,整套系统只共用会员数据。

  每个模块开发数据api 接口,供主程序调用数据报表做分析。

  主要面向企业客户,用于企业采购、销售订单管理,仓储库存管理,企业财会,客户管理等等。

  另外对外是b2b,面向客户运营,暂时可能对接其它的系统,减少开发量。

  大家有好的架构建议可以提出来,因为我只有一个人开发,所以尽量简单的开发。以后慢慢完善。

  具体怎么架构还在筹划中,下面是我在项目中刚刚写的一个php 模板引擎,喜欢的朋友可以拿去。

  在htm 模板中使用方法

  循环调用

  {loop $lists $i $t}

  <a href="{$t[linkurl]}">{$t[title]}</a>

   {/loop}

  直接调用变量

  {$title}

  php 文件引入函数 template($name = index, $dir = ); 即可

  下面是引擎代码

  <?php

  function template($name = index, $htmdir = ,$phpdir=) { //模板引入函数

   $htmlfile = $htmldir./.$name..htm; //静态文件地址

   $phpfile = $phpdir./.$name..php; //编译文件地址

   if(!is_file($phpfile)){ //判断编译文件存在否

   //调用模板编译函数对html 模板进行php编译

   template_cache($htmlfile,$phpfile);

   }

  include $phpfile;

  }

  //构造一个模板编译函数

  function template_cache($htmlfile, $phpfile) {

  $content = template_replace(@file_get_contents($htmlfile)); //这里引入替换函数将htm中的标签替换成php

  file_put_contents($phpfile, $content); //将静态替换好的文件保存到当前模型的缓存目录下

  }

  //htm 标签替换

  function template_replace($str) {

  $str = preg_replace("/\<\!\-\-\[(.+?)\]\-\-\>/", "", $str);

  $str = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}", $str);

  $str = preg_replace("/\{template\s+([^\}]+)\}/", "<?php include template(\\1);?>", $str);

  $str = preg_replace("/\{php\s+(.+)\}/", "<?php \\1?>", $str);

  $str = preg_replace("/\{if\s+(.+?)\}/", "<?php if(\\1) { ?>", $str);

  $str = preg_replace("/\{else\}/", "<?php } else { ?>", $str);

  $str = preg_replace("/\{elseif\s+(.+?)\}/", "<?php } else if(\\1) { ?>", $str);

  $str = preg_replace("/\{/if\}/", "<?php } ?>\r\n", $str);

  $str = preg_replace("/\{loop\s+(\S+)\s+(\S+)\}/", "<?php if(is_array(\\1)) { foreach(\\1 as \\2) { ?>", $str);

  $str = preg_replace("/\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}/", "<?php if(is_array(\\1)) { foreach(\\1 as \\2 => \\3) { ?>", $str);

  $str = preg_replace("/\{/loop\}/", "<?php } } ?>", $str);

  $str = preg_replace("/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\(([^{}]*)\))\}/", "<?php echo \\1;?>", $str);

  $str = preg_replace_callback("/<\?php([^\?]+)\?>/s", "template_addquote1", $str);

  $str = preg_replace("/\{(\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\+\-\x7f-\xff]*)\}/", "<?php echo \\1;?>", $str);

  $str = preg_replace_callback("/\{(\\$[a-zA-Z0-9_\[\]\\"\$\+\-\x7f-\xff]+)\}/s", "template_addquote2", $str);

  $str = preg_replace("/\{([A-Z_\x7f-\xff][A-Z0-9_\x7f-\xff]*)\}/s", "<?php echo \\1;?>", $str);

  $str = preg_replace("/\([A-Za-z]+)\[\([A-Za-z\.]+)\\](.?)\/s", "\\1[\\2]\\3", $str);

  $str = preg_replace("/(\r?\n)\\1+/", "\\1", $str);

  $str = str_replace("\t", , $str);

  $str = "<?php defined(IS_HJCMS) or exit(非法访问);?>".trim($str);

  return $str;

  }

  function template_addquote1($matches) {

  return str_replace("\\\"", "\"", preg_replace("/\[([a-zA-Z0-9_\-\.\x7f-\xff]+)\]/s", "[\\1]", $matches[0]));

  }

  function template_addquote2($matches) {

  return <?php echo .str_replace("\\\"", "\"", preg_replace("/\[([a-zA-Z0-9_\-\.\x7f-\xff]+)\]/s", "[\\1]", $matches[1])).;?>;

  }

  ?>

  可以封装成template.inc.php 在 项目的配置文件中引入

  <?php

  include template.inc.php;

  $htmdir = ; //自己设置

  $phpdir = ;//自己设置

  template(login,$htmdir,$phpdir); //

  ?>

  使用起来非常简单,比php的smarty 好用多了

标签: 云平台