深入浅出之Smarty模板引擎工作机制(一)

  深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解。

  在没有使用Smarty模板引擎的情况下,我们都是将PHP程序和网页模板合在一起编辑的,好比下面的源代码:

<?php
$title="深处浅出之Smarty模板引擎工作机制";
$content="Smarty模板引擎原理流程图";
$auth="MarcoFly";
$website="www.MarcoFly.com";
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><?php echo $title?></title>
</head>
<body>
<p>内容:<?php echo $content?></p>
<p>作者:<?php echo $auth?></p>
<p>网址:<?php echo $website?></p>
</body>
</html>

  输出到浏览器的结果截图:

  查看HTML源代码:

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>深处浅出之Smarty模板引擎工作机制</title>

</head>

<body>

<p>内容:Smarty模板引擎原理流程图</p>

<p>作者:MarcoFly</p>

<p>网址:www.MarcoFly.com</p>

</body>

</html>

  程序比较小的情况下这种开发方式尚且不方便,一旦要开发一个大的WEB项目,就必须得使用到模板引擎。

  使用模板引擎的情况下:

  我们的开发方式将有所改变,美工人员只管做模板,后台开发人员专心写自己的程序。

  一个web项目就可以分为模板文件和PHP程序了

  比如:

  美工人员就可以这样编辑网页模板文件:

  index.dwt源代码

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><{$title}></title>
</head>
<body>
<p>内容:<{$content}></p>
<p>作者:<{$auth}></p>
<p>网址:<{$website}></p>
</body>
</html>

  而后台WEB开发人员可以专注于PHP代码的书写:

  index.php

<?php
    include "./Smarty.ini.php";
    $title="深处浅出之Smarty模板引擎工作机制";    
    $content="Smarty模板引擎工作机制流程图";
    $auth="MarcoFly";
    $website="www.MarcoFly.com";
    $tpl->assign("title",$title);
    $tpl->assign("content",$content);    
    $tpl->assign("auth",$auth);
    $tpl->assign("website",$website);
    $tpl->display("index.dwt");
?>

  从以上两段简单的演示代码可以看出,前台模板文件没有涉及到任何关于PHP的代码,只有几个看似陌生的标签&lt;{$title}&gt;和&lt;{$content}&gt;,而后台的php程序代码也没有涉及到前台的HMTL代码

  参考下图对比这两种开发方式的区别

  通过对比,我们得出结论:在使用模板引擎后,原先需要使用PHP编写的地方,现在只需要用模板引擎提供标签的形式来代替了。

  注:Smarty模板引擎默认的标签形式是{$xxx},如,{$title},{$content}

  当然我们可以初始化为自己想要的标签形式,如我将其初始化为:&lt;{$xxx}&gt;的形式),如,&lt;{$title}&gt;、&lt;{$content}&gt;

  不知各位看官有木有觉得奇怪,&lt;{$title}&gt;、&lt;{$content}&gt;根本就不是PHP的语法形式,那最终又是如何被输出到客户的浏览器中的,是否另有玄机?带着这个疑问,我们继续深究......

  其实,这一切的一切都是由Smarty模板引擎这双神秘的手在“暗中操作”着,经过Smarty模板引擎的“暗中操作”之后,起初的模板文件(index.dwt)经过Smarty“成功手术”之后,被改造为能在服务器端执行的PHP代码文件。

  想看看模板文件(index.dwt)和后台的PHP程序(index.php)经过“手术”(即编译)之后的庐山真面目吗?

  在此贴上经过模板引擎编译之后的编译文件的源代码:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><?php echo $this->arr["title"] ?></title>
</head>
<body>
<p>内容:<?php echo $this->arr["content"] ?></p>
<p>作者:<?php echo $this->arr["auth"] ?></p>
<p>网址:<?php echo $this->arr["website"] ?></p>
</body>
</html>

  看到这里,各位看官是否恍然大悟,原来Smarty模板引擎的工作就是:将前台美工人员编写的模板文件(index.dwt)和后台开发人员编写的PHP程序(index.php)整合在一起,经过编译这一步骤之后,原先的模板标签被替换成了php代码。

  为了方便大家理解,我简单的做了一张代码流程图:

  如果你觉得很神秘,想更深入了解Smarty模板引擎是如何完成这一步骤的,可以看看深入浅出之Smarty模板引擎工作机制(二)

  文章出自:WEB开发_小飞

  转载请注明出处:http://www.cnblogs.com/hongfei/archive/2011/12/10/Smarty-one.html

本站原创内容,转载请注明来源:https://www.liutonghui.com/73.html

jQuery制作图片浮动放大,鼠标滚轮缩放功能
上一篇 2014-08-10
深入浅出之Smarty模板引擎工作机制(二)
下一篇 2014-08-18

评论列表(0条)

  • 暂无评论

发表评论

captcha

相关推荐

  • 一个迷你版Smarty模板引擎,认识模板引擎原理(附代码)

      前些时间在看创智博客韩顺平的Smarty模板引擎教程,再结合自己跟李炎恢第二季开发中CMS系统写的tpl模板引擎。今天就写一个迷你版的Smarty引擎,虽然说我并没有深入分析过Smarty的源码,但是对模板引擎的原理,还是有深刻的理解的。如果有什么还需要改进的地方,记得提出来。   一、什么是Smarty模板引擎:   Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,......

    2013-11-19
    20520
  • 打工人怎么做副业项目

      2014年的春节结束了,过完年了,打工人们又都回到了各自的工作岗位,新的一年在工作上有什么计划吗?其实很多人都想过平时应该做点什么副业增加自己的收入,特别是有车贷和房贷的人,压力很大,很想要多挣点钱。   其实在要做什么副业前,首先要想想你最擅长什么,相比于你做的工作以外,你还有什么特长。或者你可以把主业工作持续发挥到下班以后的时间。比方说你擅长写作,文笔不错,可以写写文章,小到一些小故事投稿到一些书刊杂志机构,赚取稿费,如果文章......

    2014-02-09
    21970
  • 深入浅出之Smarty模板引擎工作机制(二)

      源代码下载地址:深入浅出之Smarty模板引擎工作机制   接下来根据以下的Smarty模板引擎原理流程图开发一个自己的模板引擎用于学习,以便加深理解。   Smarty模板引擎的原理,其实是这么一个过程:   把模板文件编译成php文件,然后每次都去读取下模板的修改时间,没有修改就不编译。然后include这个&ldquo;编译&rdquo;后的PHP文件。   所谓编译也就是模板用正则替换成含PHP代码的过程。   实际上并不......

    2014-08-18
    14380
  • PHP封装数据库操作Model类示例

      数据库操作是产品开发中最常见的需求,封装一个PHP数据库操作Model类可以减少反复的写大量SQL语句,下面就为大家分享一个数据库操作Model类。 &lt;?php //引入配置文件 include "./config.php"; class Model { public $link;//存储连接对象 public $tableName = "";//存储表名 public $field =......

    2019-06-12
    21024
  • ThinkPHP数据库操作(Db)与模型操作(Model)区别

      Db类数据操作:性能略高一些,语法简单直观,但是不支持自动处理数据,自动验证,关联查询等功能,适合简单数据操作。 use think\facade\Db; // 查询 Db::table('user')-&gt;where('id', 1)-&gt;find(); // 新增 Db::table('user')-&gt;insert([ 'name' =&gt; '张三', 'age' =&gt; 20 ]); ......

    2019-12-02
    18300
  • TinyMCE插入代码块强制显示行号

      TinyMCE自带codesample插入代码功能不支持行号,需要依靠Prism.js行号插件实现。在编辑器插入代码会生成如下代码: &lt;pre class="line-numbers language-javascript"&gt; &lt;code&gt; 代码内容 &lt;/code&gt; &lt;/pre&gt;   注意:class里的line-numbers类有时会没有自己加上,导致前台不显示行号,可能是个......

    2023-03-20
    12070
  • 刀郎新歌《罗刹海市》引发轰动

      刀郎的新歌《罗刹海市》最近引起了轰动,但这次不是因为它的音乐本身有多么好听或传唱度有多高,而是因为歌词被许多网友解读为内涵了那英、汪峰、杨坤和高晓松等名人,引发了广泛的兴趣和热议。   歌词中的一些词汇和意象被认为与这些名人的特点和经历有关,网友们纷纷展开联想,将歌词与这些名人一一对应起来。那英被指歌词中&ldquo;那又鸟&rdquo;所指,杨坤被描述为&ldquo;马户&rdquo;,高晓松被称为&ldquo;拿扇子的公公&r......

    2023-08-03
    11810
  • FC游戏网九岁了

      FC游戏网今天成立九年整了,回望过去,我深感欣慰,展望未来,我充满信心。一路走来,经历过困难和挫折,也有过成功后的喜悦,我相信一分耕耘就会有一分收获。感谢这个时代带来的机遇,祝福所有对梦想坚守和对生活热爱的人。 ......

    2024-01-01
    8260