简单PHP模板引擎的实现例子

简单php教程模板引擎的实现例子

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
</head>

<body>
{$var}
<br />

{loop $arr $v}
{$v} |
{/loop}
</body>
</html>

index.php调用文件

<?php
header("content-type:text/html; charset=utf-8");
require_once "./include/common.inc.php";

$var = 'abc';
$arr = array(1, 2, 3);

include template('index');
?>

/common.inc.php文件

<?php
define('in_site', true);
define('site_root', substr(dirname(__file__), 0, -7));

require_once site_root.'./include/template.func.php';

$tplrefresh = 1;                              //设置是否检查更新
$tpldir = site_root.'./templates/default/';   //模板存放目录
$objdir = site_root.'./sitedata/templates/';  //模板编译文件存放目录
?>

template.func.php文件

<?

if(!defined('in_site')) {
    exit('access denied!');
}

function checktplrefresh($tplfile, $timecompare) {
    global $tplrefresh;

    if($tplrefresh == 1 && @filemtime($tplfile) != $timecompare) {
        parse_template($tplfile);
    }
 return true;
}

function template($file) {
 global $tpldir, $objdir;

 $objfile = $objdir.$file.'.tpl.php';

    if(!file_exists($objfile)) {
        $tplfile = $tpldir.$file.'.htm';
        parse_template($tplfile);
    }
    return $objfile;
}

function parse_template($tplfile) {
    global $tpldir, $objdir;

 $file = basename($tplfile, '.htm');
 $objfile = $objdir.$file.'.tpl.php';

    if(!$fp = @fopen($tplfile, 'r')) {
  exit("current template file '$tplfile' not found or have no access!");
 }
 $template = fread($fp, max(filesize($tplfile), 1));
 fclose($fp);

    $template = preg_replace("/[nrt]*{subtemplates+([a-z0-9_:]+)}[nrt]*/is", "<?php include template('1'); ?>", $template);

 $template = preg_replace("/([nr]+)t+/s", "1", $template);
 $template = preg_replace("/<!--{(.+?)}-->/s", "{1}", $template);
    $template = preg_replace("/{($[a-za-z0-9_[]'"$.x7f-xff]+)}/s", "<?php echo 1; ?>", $template);

    $template = preg_replace("/[nrt]*{evals+(.+?)}[nrt]*/is", "<?php 1; ?>", $template);
    $template = preg_replace("/[nrt]*{echos+(.+?)}[nrt]*/is", "<?php echo 1; ?>", $template);
 $template = preg_replace("/([nrt]*){elseifs+(.+?)}([nrt]*)/is", "1<?php } elseif(2) { ?>3", $template);
 $template = preg_replace("/([nrt]*){else}([nrt]*)/is", "1<?php } else { ?>2", $template);

 for($i = 0; $i < 5; $i++) {
        $template = preg_replace("/[nrt]*{loops+(s+)s+(s+)}[nr]*(.+?)[nr]*{/loop}[nrt]*/is", "<?php if(is_array(1)) { foreach(1 as 2) { ?>3<?php } } ?>", $template);
        $template = preg_replace("/[nrt]*{loops+(s+)s+(s+)s+(s+)}[nrt]*(.+?)[nrt]*{/loop}[nrt]*/is", "<?php if(is_array(1)) { foreach(1 as 2 => 3) { ?>4<?php } } ?>", $template);
  $template = preg_replace("/([nrt]*){ifs+(.+?)}([nr]*)(.+?)([nr]*){/if}([nrt]*)/is", "1<?php if(2) { ?>345<?php } ?>6", $template);
 }

    $template = preg_replace("/{([a-za-z_x7f-xff][a-za-z0-9_x7f-xff]*)}/s", "<?php echo 1; ?>", $template);
 $template = preg_replace("/ ?>[nr]*<?php /s", " ", $template);

 $template = preg_replace("/"(http)?[w./:]+?[^"]+?&[^"]+?"/e", "transamp('')", $template);
 $template = preg_replace("/<script[^>]*?src="(.+?)"(.*?)>s*</script>/ise", "strips教程criptamp('1', '2')", $template);

    $template = "<?php if(!defined('in_site')) exit('access denied!'); checktplrefresh('$tplfile', ".time()."); ?>n$template";

    if(!$fp = @fopen($objfile, 'wb')) {
  exit("directory '$objdir' not found or have no access!");
 }
 flock($fp, lock_ex);
    fwrite($fp, $template);
    flock($fp, lock_un);
 fclose($fp);
}

function transamp($str) {
 $str = str_replace('&', '&amp;', $str);
 $str = str_replace('&amp;amp;', '&amp;', $str);
 $str = str_replace('"', '"', $str);
 return $str;
}

function stripscriptamp($s, $extra) {
 $extra = str_replace('"', '"', $extra);
 $s = str_replace('&amp;', '&', $s);
 return "<script src="$s" type="text/网页特效"$extra></script>";
}
?>

时间: 2025-01-27 13:20:44

简单PHP模板引擎的实现例子的相关文章

Javascript简单实现模板引擎例子

一.背景 有两个大项目是从RD那边迁移过来,因为项目初期FE无人力跟进,所以都是后端同学直接用Smarty完成的前端部分:所以考虑到迁移的成本和方案,索性升级一下当前的JS模板引擎. 二.大致方案 支持extends标签 支持block标签 1.标签语法 为了便于模板词法分析,在模板左定界符后加上@来标识,标签名替换为属性设置方式,如extends标签: <%@ extends="layout/layout.html" %> 2.extends实现方案 将整个extends

在Yii框架中使用PHP模板引擎Twig的例子_php实例

Twig是一款快速.安全.灵活的PHP模板引擎,它内置了许多filter和tags,并且支持模板继承,能让你用最简洁的代码来描述你的模板.他的语法和Python下的模板引擎Jinjia以及Django的模板语法都非常像. 比如我们在PHP中需要输出变量并且将其进行转义时,语法比较累赘: 复制代码 代码如下: <?php echo $var ?><?php echo htmlspecialchars(\$var, ENT_QUOTES, 'UTF-8') ?> 但是在Twig中可以这

简单php 模板引擎

class  TEMPLATE    {                                                         private  $path = "." ;          #根目录                                                          private $var;                                       private $tplDir = &quo

PHP原生模板引擎 最简单的模板引擎_php模板

复制代码 代码如下: <?php $a = array( 'a','b','c' ); require 'template/demo.php';//引用模板 ?> 模板文件: 复制代码 代码如下: <!DOCTYPE html> <html lang="zh"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-

简单的自定义php模板引擎_php实例

模板引擎的思想是来源于MVC(Model View Controller)模型,即模型层.视图层.控制器层. 在Web端,模型层为数据库的操作:视图层就是模板,也就是Web前端:Controller就是PHP对数据和请求的各种操作.模板引擎就是为了将视图层和其他层分离开来,使php代码和html代码不会混杂在一起.因为当php代码和html代码混杂在一起时,将使代码的可读性变差,并且代码后期的维护会变得很困难.  大部分的模板引擎原理都差不多,核心就是利用正则表达式解析模板,将约定好的特定的标识

php模板引擎技术简单实现_php实例

用了smarty,tp过后,也想了解了解其模板技术是怎么实现,于是写一个简单的模板类,大致就是读取模板文件->替换模板文件的内容->保存或者静态化  tpl.class.php主要解析 assign 方法实现      /** * 模板赋值操作 * @param mixed $tpl_var 如果是字符串,就作为数组索引,如果是数组,就循环赋值 * @param mixed $tpl_value 当$tpl_var为string时的值,默认为 null */ public function a

深入浅出之Smarty模板引擎工作机制(二)

源代码下载地址:深入浅出之Smarty模板引擎工作机制 接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解.   Smarty模板引擎的原理,其实是这么一个过程: 把模板文件编译成php文件,然后每次都去读取下模板的修改时间,没有修改就不编译.然后include这个"编译"后的PHP文件. 所谓编译也就是模板用正则替换成含PHP代码的过程. 实际上并不会每次请求都编译,所以性能尚可.  模板文件和php程序文件经过模板引擎的编译后合成为一个文件,

一个不成熟的模板引擎思路

关于模板,我倒是用过了不少.最开始要数Java的JSP了,然后接触了PHP的smarty,再就是Python的jinja2, Django内置模板,现在刚开始看Nodejs,也发现了不少类似的模板引擎,ejs, jade等等吧. 模板带来的最直接的好处就是加速开发,前后端分离.除此之外,对于字符串的格式化同样是个比较好的应用.习惯了Python中 string = "hello {}".format("郭璞") # hello 郭璞 string = "h

php Smarty模板引擎工作机制(二)

所谓编译也就是模板用正则替换成含PHP代码的过程. 实际上并不会每次请求都编译,所以性能尚可. 模板文件和php程序文件经过模板引擎的编译后合成为一个文件,即编译后的文件. 接下来,我们根据该原理流程写一个简单的模板引擎...... 先贴上核心代码: Smarty.class.php文件  代码如下 复制代码 <?php     class Smarty{         public $template_dir;//模板目录         public $compile_dir;//编译目录