一个简单的模板类--编译型的(simplet类增强后)

php中文网
发布: 2016-05-19 15:12:13
原创
1158人浏览过

在上次发布的simplet类之后(http://bbs.phpchina.com/thread-85257-1-1.html),发现有很多缺陷,例如不支持多维数组,注释和没有缓存功能,这次我把这些功能都加进去了!!!
大家有兴趣的话,我下次出个教程,来谈谈我写这个类的一些思想和方法!!!支持的话可以跟贴支持我!
PHP代码:
simplet.class.php
class SimpleT {
   PRivate $t_vars;
   private $templates_dir;
   private $templates_c_dir;
   private $cache;
   private $cache_dir;
  
   public function __construct() {
     $this->templates_dir = './templates/';
     $this->templates_c_dir = './templates_c/';
     $this->cache = 0;
     $this->cache_dir = './cache/';
   }
   public function setDir($dir, $type = 'template') {
     if(is_dir($dir)) {
       if($type == 'template')
         $this->templates_dir = rtrim($dir, '/').'/';
       elseif($type == 'template_c')
         $this->templates_c_dir = rtrim($dir, '/').'/';
       elseif($type == 'cache')
         $this->cache_dir = rtrim($dir, '/').'/';
       else
         return false;
       return true;
     } else {
       return false;
     }
   }
  
   public function cache($time) {
     if(is_numeric($time)) {
       $this->cache = $time;
       return true;
     } else {
       return false;
     }
   }
  
   public function assign($var, $value = NULL) {
     if (is_array($var)) {
       foreach ($var as $key => $val) {
         $this->t_vars[$key] = $val;
       }
     } else {
       $this->t_vars[$var] = $value;
     }
   }
   private function comp($filename) {
     try {
       if(!$fp = fopen($filename, 'r')) {
         throw new Exception('Can not open ' . $filename);
       }
       $filesize = filesize($filename);
       if($filesize          throw new Exception('The file size must > 0 ' );
       }
       $content = fread($fp, $filesize);
       fclose($fp);
       unset($fp);
      
       $content = preg_replace("//","", $content);
       $content = preg_replace("//", " \$$1_val) { ?>",$content);
       $content = preg_replace("//", "", $content);
       $content = preg_replace("//", " \$$3) { ?>", $content);
       $content = preg_replace("//", "", $content);
       $content = preg_replace("//", "", $content);
       $content = preg_replace("//", "", $content);
       $content = preg_replace("//","", $content);
       $content = preg_replace("/([^]{0,})/", "", $content);
       if (preg_match_all("/)]{1,})}%>/", $content, $files)) {
         $this->comp($this->templates_dir . $files[1][0]);
       }
       $content = preg_replace("/)]{1,})}%>/", "templates_c_dir}simplet_comp_$1.php'; ?>", $content);
       echo $content;
       $fp = fopen($this->templates_c_dir . 'simplet_comp_' . basename($filename) . '.php', 'w');
       if(!fwrite($fp, $content)) {
         throw new Exception('Can not write content in the ' . $filename);
       }
       fclose($fp);
     } catch (Exception $e) {
       echo $e->getMessage();
     }
     return true;
   }
   public function display($filename) {
     $filename = $this->templates_dir . $filename;
     if(!file_exists($filename)) {
       return false;
     }
     $t_filename_c = $this->templates_c_dir . 'simplet_comp_' . basename($filename) .'.php';
     if(!file_exists($t_filename_c) || filemtime($t_filename_c)        $this->comp($filename);
     }
     if($this->cache > 0) {
       $cache_file = $this->cache_dir . basename($filename);
       if(!file_exists($cache_file) || (time() - filemtime($cache_file)) > $this->cache) {
         ob_start();
         foreach ($this->t_vars as $key => $val) {
           $$key = $val;
         }
         include($t_filename_c);
         $content = ob_get_contents();
         ob_end_clean();
         $fp = fopen($cache_file, 'w');
         fwrite($fp, $content);
         fclose($fp);
         echo $content;
         unset($content);
       } else {
         include($cache_file);
       }
     } else {
       foreach ($this->t_vars as $key => $val) {
         $$key = $val;
       }
       include($t_filename_c);
     }
    
   }
}
?>

PHP代码:
test.php

require_once('simplet.class.php');

$t = new SimpleT();
$t->cache(10);//开启cache功能,并且设置为过期时间为10秒
$t->assign('arrays', array(array('hello','world')));
$t->assign('condition',false);
$t->display('index.php');
?>

PHP代码:
index.php(模板文件,放在templates/文件夹里)

逍遥内容管理系统(Carefree CMS)1.3.0
逍遥内容管理系统(Carefree CMS)1.3.0

系统简介逍遥内容管理系统(CarefreeCMS)是一款功能强大、易于使用的内容管理平台,采用前后端分离架构,支持静态页面生成,适用于个人博客、企业网站、新闻媒体等各类内容发布场景。核心特性1、模板套装系统 - 支持多套模板自由切换,快速定制网站风格2、静态页面生成 - 一键生成纯静态HTML页面,访问速度快,SEO友好3、文章管理 - 支持富文本编辑、草稿保存、文章属性标记、自动提取SEO4、全

逍遥内容管理系统(Carefree CMS)1.3.0 1
查看详情 逍遥内容管理系统(Carefree CMS)1.3.0


这里是注释
下面是多维数组循环


  
    
  


下面是条件判断


  

Condition is true



下面是包含文件()

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号