zoukankan      html  css  js  c++  java
  • 带个人备注的,模板->编译文件->缓存文件

    <?php

    //模板类
    class Templates {
    //我想通过一个字段来接受变量
    //但是又不知道有多少个变量要接受。
    //所以我们要动态的接受变量
    //可以通过数组来实现这个功能。
    private $_vars = array();
    //保存系统变量
    private $_config = array();

    //创建一个构造方法,来验证各个目录是否存在
    public function __construct() {
    if (!is_dir(TPL_DIR) || !is_dir(TPL_C_DIR) || !is_dir(CACHE)) {
    exit('ERROR:模板目录或编译目录或缓存目录不存在!请手工设置!');
    }
    //保存系统变量
    $_sxe = simplexml_load_file(ROOT_PATH.'/config/profile.xml');
    $_tagLib = $_sxe->xpath('/root/taglib');
    foreach ($_tagLib as $_tag) {
    $this->_config["$_tag->name"] = $_tag->value;
    }
    }

    //assign()方法,用于注入变量
    public function assign($_var, $_value) {
    //$_var用于同步模板里的变量名 例如index.php是name 那么index.tpl就是{$name}
    //$_value值表示的是index.php里的$_name的值,就是 '李炎恢'
    if (isset($_var) && !empty($_var)) {
    //$this->_vars['name']
    $this->_vars[$_var] = $_value;
    } else {
    exit('ERROR:请设置模板变量');
    }
    }

    //display()方法
    public function display($_file) {
    //给include进来的tpl传一个模板操作的对象
    $_tpl = $this;
    //设置模板的路径
    $_tplFile = TPL_DIR.$_file;
    //判断模板是否存在
    if (!file_exists($_tplFile)) {
    exit('ERROR:模板文件不存在!');
    }
    //编译文件
    $_parFile = TPL_C_DIR.md5($_file).$_file.'.php';
    //缓存文件
    $_cacheFile = CACHE.md5($_file).$_file.'.html';
    //当第二次运行相同文件的时候,直接载入缓存文件,避开编译
    if (IS_CACHE) {
    //缓存文件和编译文件都要存在
    if (file_exists($_cacheFile) && file_exists($_parFile)) {
    //判断模板文件是否修改过,判断编译文件是否修改过
    if (filemtime($_parFile) >= filemtime($_tplFile) && filemtime($_cacheFile) >= filemtime($_parFile)) {
    //载入缓存文件
    include $_cacheFile;
    return;
    }
    }
    }
    //当编译文件不存在,或者模板文件修改过,则生成编译文件
    if (!file_exists($_parFile) || filemtime($_parFile) < filemtime($_tplFile)) {
    //引入模板解析类
    require_once ROOT_PATH.'/includes/Parser.class.php';
    $_parser = new Parser($_tplFile); //模板文件
    $_parser->compile($_parFile); //编译文件
    }
    //载入编译文件
    include $_parFile;
    if (IS_CACHE) {
    //获取缓冲区内的数据,并且创建缓存文件
    file_put_contents($_cacheFile,ob_get_contents());
    //清除缓冲区(清除了编译文件加载的内容)
    ob_end_clean();
    //载入缓存文件
    include $_cacheFile;
    }
    }

    //创建create方法,用于header和footer这种模块模板解析使用,而不需要生成缓存文件
    public function create($_file) {
    //设置模板的路径
    $_tplFile = TPL_DIR.$_file;
    //判断模板是否存在
    if (!file_exists($_tplFile)) {
    exit('ERROR:模板文件不存在!');
    }
    //编译文件
    $_parFile = TPL_C_DIR.md5($_file).$_file.'.php';
    //当编译文件不存在,或者模板文件修改过,则生成编译文件
    if (!file_exists($_parFile) || filemtime($_parFile) < filemtime($_tplFile)) {
    //引入模板解析类
    require_once ROOT_PATH.'/includes/Parser.class.php';
    $_parser = new Parser($_tplFile); //模板文件
    $_parser->compile($_parFile); //编译文件
    }
    //载入编译文件
    include $_parFile;
    }







    }
    ?>  

  • 相关阅读:
    全局索引 truncate有数据的分区,索引失效,没数据的分区,索引不失效
    数组的操作
    调存储过程shell
    Flex中的折线图
    SecurityError:Error #2048:安全沙箱冲突
    Flex中对表格中某列的值进行数字格式化并求百分比
    Flex中对表格中某列的值进行数字格式化
    ORA-00904:"T1"."AREA_ID" :标识符无效
    严重:IOException while loading persisted sessions:java.io.EOFException.
    开放的平台、向上的文化——揭秘万达电商(4)
  • 原文地址:https://www.cnblogs.com/shuaigege/p/9313496.html
Copyright © 2011-2022 走看看