php模板原理php模板引擎smarty模板原理浅谈

与f      2022-02-10     605

关键词:

 mvc是开发中的一个伟大的思想,使得开发代码有了更加清晰的层次,让代码分为了三层各施其职、无论是对代码的编写以及后期的阅读和维护,都提供了很大的便利。

  我们在php开发中,视图层view是不允许有php代码来操作数据库之类的来获取数据的,我们一般都会在控制器层controller,就已经把视图层要展示的数据准备好,方便视图层直接用来展示。

  smarty模板技术,可以让数据和视图进行分离,让视图中不能直接出现php代码。这样的话,让前段页面的开发和后台数据的开发,可以双管齐下,同时进行了。

  

  smarty模板的使用比较简单,主要有两个非常核心的函数。一个是assig(),把模板中要使用的数据进行欲赋值,一个是display(),用来解析和展示最后的视图模板。

  使用的简单代码如下:

include_once "Smarty.class.php";//引入smarty类

$smarty = new Smarty;//创建smarty对象

$smarty->assign("name","zhangmiao");//赋值,以备模板中使用
$smarty->assign("age","18");

$smarty->display('index.tpl');//引入模板,展示视图页面

我们看下模板源代码是这样的:

<h1>测试模板1</h1>
我的名字是:{$name}<br/>
我的年纪是:{$age}<br/>

浏览器页面是这样的:

疑问:我们模板中没有php代码,我们只用了{$name}和{$age}就能把对应的变量给展示了出来,是什么鬼呢?

然后,我们一看smarty编译后的文件是这样的:

<h1>测试模板1</h1>
我的名字是:<?php echo $this->var["name"]; ?><br/>
我的年纪是:<?php echo $this->var["age"]; ?><br/>

原来如此,最终还是变成了含有php代码的模板,但是这个模板中把标签转成php代码的工作,我们交给了smarty模板引擎来完成的。

 

那到底smarty模板引擎是怎么把模板里面的非php代码的标签,转变成被最终可以解析执行的php代码的呢?

主要思路是:替换。

分成了两步:

  1、用过assign函数把要解析的标签变量赋值

  2、通过display函数把标签替换成对象的php变量

我们根据这个思路,自己也写了个简易版的smarty模板引擎,算是多smarty模板引擎设计原理的一种理解。但是只能解析单个变量的标签,其他标签均没有处理。代码如下:

class MySmarty{

    //模板存放路径
    public $template = './template/';
    //编译后模板路径
    public $template_c = './template_c/';

    //存放变量的数组,通过assign函数赋值
    public $var = array();


    //变量赋值
    public function assign($vkey,$value){
        if($vkey != ""){
            $this->var[$vkey] = $value;//把要模板中解析的数据压入数组
        }
    }

    //模板中变量替换
    public function display($path){
        $template_path = $this->template.$path;
        $template_c_path = $this->template_c.$path.".php";
        if(!file_exists($template_path)){
            return false;
        }

        //只有解析后的模板文件不存在或者模板源文件有新的改动的情况下 重新解析模板       
        if(!file_exists($template_c_path) || filemtime($template_path)>filemtime($template_c_path)){
            //获取模板源文件,用来替换
            $template_content = file_get_contents($template_path);

            $pattern = array(
                '/\{\s*\$([a-zA-Z][a-zA-Z0-9_]*)\s*\}/i'
            );
            $replace = array(
                '<?php echo $this->var["${1}"]; ?>'
            );
            //用正则去替换模板源文件中的变量符号{$varname}
            $res = preg_replace($pattern,$replace,$template_content);
            //编译后文件写入某个目录
            file_put_contents($template_c_path,$res);
        }
        //引入编译后文件,其实就是执行了那个php文件的代码
        include_once $template_c_path;

    }
}

我们调用自己的assign和display放入引入,也能正常解析使用啦

 

转:https://www.cnblogs.com/zmfly/p/6548761.html

 

php模板引擎原理

模板引擎实现的原理访问php文件,php文件会去加载模板引擎,通过模板引擎去加载模板然后替换模板里面的变量然后生成一个编译文件最后将该编译文件导入访问的php文件中输出第二次访问的时候如果缓存文件存在或者没有被改... 查看详情

php模板引擎smarty

一、smarty的特点速度:相对于其他模板引擎,速度较快编译型:在下次访问模板时直接访问编译文件,不再进行模板重新编译缓存技术:可以将用户最终看到的HTML文件缓存成一个静态HTML插件技术:smarty可以自定义插件,插件其... 查看详情

php模板引擎smarty详细介绍

篇文章主要介绍了PHP模板引擎smarty详细介绍,本文讲解了什么是smarty、smarty优点、不适合使用smarty的地方、smarty目录结构及版本,需要的朋友可以参考下    /*  一、什么是smarty?  smarty是一个使用PHP写出来的模板PHP模板引... 查看详情

php随笔---smarty模板引擎使用成熟的smarty模板05

◇Smarty模板引擎流程图,如下:       ◇使用Smarty使得程序的速度有略微的降低了。◇如何使用Smarty,步骤如下:     ◇Smarty里的核心资源都放在libs文件夹中了。直接使用libs就好了。&... 查看详情

php随笔---smarty模板引擎已有模板和smarty结合11

◇已有模板结合Smarty的步骤:    ◇把模板复制到template目录。    ◇先找到js代码<script>...</script>,在<script>....</script>外层加上{literal}<script>...</script& 查看详情

php--关于模板的原理和解析(php模板原理)

...进行分离,使代码的可读性和维护性得到显著提高。使用模板引擎:  我们所说的模板是Web模板,是主要由HTML标记组成的语言来编写的页面,但也有如何表示包含动态生成内容的方式(解析标签)。模板引擎是一种软件... 查看详情

前端学php之smarty模板引擎

前面的话  对PHP来说,有很多模板引擎可供选择,但Smarty是一个使用PHP编写出来的,是业界最著名、功能最强大的一种PHP模板引擎。Smarty像PHP一样拥有丰富的函数库,从统计字数到自动缩进、文字环绕以及正则表达式都可以直... 查看详情

php模板引擎,smarty定义

PHP模板引擎:PHP是一种HTML内嵌式的在服务器端执行的脚本语言。初始的开发模板就是混合层的数据编程,虽然通过MVC的设计模式可以实现将程序的应用逻辑与网页的呈现逻辑强制分离,但也只是将程序的输入,处理,输出分开... 查看详情

php模板引擎的原理与简单实例

模板引擎其实就是将一个带有自定义标签的字符串,通过相应的规则解析,返回php可以解析的字符串,这其中正则的运用是必不可少的,所以要有一定的正则基础。总体思想,引入按规则写好的模板,传递给标签解析类(_HtmlTag)... 查看详情

smarty模板原理

模板主要是用来让前端和后端分离的,前台页面只是一个前台页面,后台页面用php代码写逻辑,写完逻辑拿到前台显示。 一、写法一般需要以下:写3个页面:1.显示页面aa.html<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http:... 查看详情

smarty模板引擎简介

前言Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要... 查看详情

smarty模板引擎

Smarty模板引擎是一个完全由PHP程序写出来的模板引擎,优点如下:速度:Smarty模板引擎相比其他的模板引擎速度更快继承技术:在Smarty里面可以定义一个父模板,让子模板来继承父模板缓存技术:可以让一个不怎么变化但是偶尔... 查看详情

javascript与php模板引擎实现原理

一、简单替换:javascript:a.代码:vardata={‘name‘:‘lee‘,‘place‘:‘wuhan‘}varstr="Hello{{name}},Welcometo{{place}}!";varres=str.replace(/{{([sS]+?)}}/g,function(param1,param2){varindex=param2returndata[index]}); 查看详情

php模板引擎smarty的基本语法

...smarty里,所有定界符以外的内容都是静态的,当smarty遇到了模板标签,将尝试解释他们,然后再以恰当的方式输出. 默认情况下是{和},但它们是可定制的.定制方法是: $smarty->left_delimiter=‘<!--{‘; $smarty->right_delimiter=... 查看详情

(12)php随笔---smarty模板引擎单模板多缓存局部不缓存20--21

◇单模板多缓存:一个模板生成多个缓存文件。◇同一个模板在使用时会生成不同的页面实现,如果开启缓存的话,则通过同一个模板生成的多个实例都需要被缓存,这样就会出现问题。◇解决办法-->在调用display()方法时,通... 查看详情

(13)php随笔---smarty模板引擎缓存的高级应用22

◇缓存集合(单模板多缓存的升级用法):一个模板可以变着花样的生成许多缓存文件◇最主要的代码为:$smarty->display(‘cacheList.html‘,$brand."|".$price."|".$network."|".$big);     ◇它会将各种参数进行排列组合,生成... 查看详情

smarty模板引擎(代码片段)

一、Smarty模板引擎1.Smarty模板引擎简介Smarty分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,就是要使PHP程序员同前端人员分离,程序员改变程序的逻辑... 查看详情

php随笔---smarty模板引擎技术基础+minismarty01-02

◇smarty是模板引擎技术之一,作用是使得“php”代码与“html代码”分离。◇一个项目里,有程序员、美工人员、DBA数据库管理员、系统运维人员。◇创建虚拟主机,两个步骤:   ◇先修改httpd-hosts.conf,加... 查看详情