PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
admin
2023-06-22 00:21:47
0

smarty模板引擎类简单工作原理

利用Smarty 模板引擎类对模板文件中的变量进行编译,编译过程其实就是利用正则表达式翻译成PHP文件。例如 模板文件中{$title} 利用正则表达式找到并替换成  vars['title'];?>

自定义 Smarty 模板引擎类 smarty.class.php页面

vars[$name]=$value;
            }
            
            //加载指定的模板 并显示
            //有一个参数是模板的文件名
            public function display($tplname){
                        $comfile = "./comps/".$tplname."_com.php";
                        $tplname = "./templates/".$tplname;
                        //编译文件不存在 或者模板文件有变化 才需要编译
                        if(!file_exists($comfile) || filemtime($tplname)>filemtime($comfile)){
                        $html = file_get_contents($tplname);
                        
                        //要替换的部分{title}
                        $reg = '/\{\s*\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\s*\}/';
                        //变量正则表达式[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]* 
                        
                        //替换后的部分vars['title'];?>
                        $rep = "vars['\\1'];?>";
                        
                        $newhtml = preg_replace($reg, $rep, $html);    
                        file_put_contents($comfile, $newhtml);
                        }
                        include $comfile;
            }
            
        }

调用模板页面 index.php

assign('title', $title);
 $smarty->assign('content', $content);
 var_dump($smarty);
 //加载指定的模板 并显示
 $smarty->display('c.php');

模板文件页  c.php页面



{$title}


{$title}

{$content}

输出结果

object(Smarty)[1]  private 'vars' => 
    array (size=2)
      'title' => string 'This is a test' (length=14)
      'content' => string 'This is content ......' (length=22)
This is a test
This is content ......


相关内容

热门资讯

阿里达摩院发布GPU版本求解器 据“达摩院DAMO”微信公众号消息,5月28日,阿里巴巴达摩院“敏迭”求解器(MindOpt)正式发...
2026年3000-4000元... 在2026年的市场,如果你手握3000-4000元的预算,想找一款系统流畅、屏幕素质出色,无论是学习...
让讯飞、XREAL、普渡畅谈A... 所有科技展会都在谈 AI,但在很多时候,AI 仍然停留在大模型、App、办公软件、智能体和云服务里。...
商务部:对日相关出口管制措施完... 在今天召开的商务部例行新闻发布会上,新闻发言人介绍,近期,中方将20家日本的相关实体列入管控名单,将...
广州“番禺大桥轿车追尾浇花车致... 澎湃新闻记者 吕新文广州市番禺区应急管理局5月27日公布《番禺区“12·17”一般道路交通事故调查报...
南方多地持续开展防汛救援 连日来,南方多地遭遇持续暴雨,当地迅速响应,全力开展预警监测,加快防汛排涝、应急救援等工作。重庆永川...
国防部回应菲方涉南海言论:无惧... 5月28日下午,国防部举行例行记者会,国防部新闻发言人蒋斌大校答记者问。记者:据报道,菲律宾武装部队...
整车多个零件被拆?知名游戏联名... “本来是去打卡联名单车的,结果一看,车上的联名物料被扒了个干干净净。”联名单车上的物料近日,滴滴青桔...
郑州一市民应聘货车司机,被诱导... “承诺月薪1万多,结果没挣钱,反而背上了贷款,这车买得太冤了!”5月24日,郑州市民徐先生反映,他去...
聚焦新型毒品等热点问题 最高检... 最高人民检察院今天(28日)发布10件未成年人权益保护和犯罪预防治理典型案例。这批案例聚焦新型毒品、...