温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP

发布时间:2020-06-22 21:03:58 来源:网络 阅读:400 作者:津沙港湾 栏目:web开发

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

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

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

<?php
/*
 * 自定义Smarty模板引擎类
 */
        class Smarty{
            private $vars = array();
            //第一个向模板中分配变量 
            //有两个参数 一个参数是模板中的变量名,一个时分配给它的变量值
            public function assign($name,$value=null){
                        if($name != ' ')
                                $this->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]* 
                        
                        //替换后的部分<?php echo $this->vars['title'];?>
                        $rep = "<?php echo \$this->vars['\\1'];?>";
                        
                        $newhtml = preg_replace($reg, $rep, $html);    
                        file_put_contents($comfile, $newhtml);
                        }
                        include $comfile;
            }
            
        }

调用模板页面 index.php

<?php
header('content-type:text/html;charset=utf-8');
/*
 * 模版引擎
 * PHP 超文本预处理脚本语言
 * 自定义模板引擎
 * 
 */
 //包含模板引擎类
 include 'smart.class.php';
 //创建模板引擎对象
 $smarty = new Smarty();
 // 连接数据库
 //执行SQL语句
 // 这是从数据库获取的动态数据,需要在模板中显示
 $title = "This is a test";
 $content = "This is content ......";
 
 //第一个向模板中分配变量
 $smarty->assign('title', $title);
 $smarty->assign('content', $content);
 var_dump($smarty);
 //加载指定的模板 并显示
 $smarty->display('c.php');

模板文件页  c.php页面

<html>
<head>
<title>{$title}</title>
</head>
<body>
<h2>{$title}</h2>
<div>
{$content}
</div>
</body>
</html>

输出结果

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 ......


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI