Smarty_模板引擎开发(2)

  混编文件一旦生成好,就不用再次生成,直接引入即可。
  (1)给每一个应用都生成一个混编文件,执行之前先判断是否存在,如果存在就直接引入
  (2)如果对应的模板文件有修改,对应的混编文件还需要重新生成。通过文件的修改时间戳来确定,如果混编文件的时间戳大于模板文件的时间戳,说明模板文件未发生修改;如果混编文件的时间戳小于模板文件的时间戳,说明模板文件发生了修改。

模板引擎优化代码:

<?php
//模板引擎类
class MiniSmarty{
    public $template_dir = "./view/";//模板文件夹
    public $templatec_dir = "./viewc/";//混编文件夹

    //给该类声明属性,用于存储外部的变量信息
    public $tpl_var = array();
    //把外部变量设置为类内部属性的一部分
    function assign($k, $v){
        $this->tpl_var[$k] = $v;  
    }

    //把compile()方法封装一下,更便于理解
    function display($tpl){
        $n = $this->compile($tpl);  
        require $n;
    }

    //“编译”模板文件({ }标记替换为php标记)
    function compile($tpl){
        $com_file = $this->templatec_dir . $tpl . ".php";//混编文件地址
        $tpl_file = $this->template_dir . $tpl;//模板文件地址

        //走“已经生成”的混编文件
        //(1)该混编文件已经存在
        //(2)混编文件的修改时间 大于 模板文件的修改时间(模板文件有修改)
        if( file_exists($com_file) && filemtime($com_file) > filemtime($tpl_file) ){
            //require $com_file;
            return $com_file;
        }else{//混编文件不存在或者模板文件有修改
            echo "new file";
            //获得模板文件内部具体的模板内容
            $cont = file_get_contents($tpl_file);
            //echo $cont;

            //替换:{ 替换为 < ?php echo $this->tpl_var['
            $cont = str_replace("{\$", "<?php echo \$this->tpl_var['", $cont);

            //替换:} 替换为 '];? >
            $cont = str_replace("}", "'];?>", $cont);

            //echo $cont;  
            //把生成好的编译内容(php+html混编内容)放入一个文件里
            file_put_contents($com_file, $cont);

            //引入混编文件 require $com_file;    
            return $com_file;
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值