一、基本概念
1.什么是mvc?
    mvc是一种开发模式,核心思想是:数据的输入、数据的处理、数据显示的强制分离。
2.什么是smarty?
    smarty是一个php的模板引擎。更明白的来说,它能够帮助开发人员更好的分离程序逻辑和页面显示。
3.smarty执行原理
        模板文件,就是一个显示数据的模板,当中须要显示的数据用占位符取代。
        smarty执行时,会读取模板文件,将模板文件里的占位符替换成真正的数据,并输出一个处理后的php文件,交由server执行。
二、自己写一个smarty模板
    为了更好的理解smarty模板,如今自己先写一个自己的smarty模板-minismarty,让自己更加深入的了解smarty执行原理。
1.新建项目minismarty
    新建模板文件路径:templates
    新建模板文件被编译后的文件路径:templates_c
    新建模板文件:intro.tpl
    新建执行的文件:index.php
    新建自己的smarty,即处理模板的文件:cls_MiniSmarty.php
2.编写index.php文件

<?phprequire_once './cls_MiniSmarty.php';$miniSmarty = new MiniSmarty();//传递数据$miniSmarty->assign("title","hello minismarty!");$miniSmarty->assign("content","<font color='red'>this is content!</font>");//传递数据到哪个页面显示$miniSmarty->display("intro.tpl");
?>

3.编写intro.tpl文件

<!--这是个模板文件-->
<html>
<head>
<meta http-equiv="Content-Language" content="en" />
<meta name="GENERATOR" content="PHPEclipse 1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>{$title}</title>
</head>
<body bgcolor="#FFFFFF" text="#000000" link="#FF9966" vlink="#FF9966" alink="#FFCC99">
{$content}
</body>
</html>
 这里面的内容是用占位符的形式,smarty的作用就是将占位符的内容替换成真正的数据。
    这样就能够实现模板文件和数据文件强制分离,通过smarty进行数据的传递。
4.编写cls_MiniSmarty.php文件

<?php
/**** 原本是通过smarty模板引擎给模板提供数据的* 如今自己模仿写一个模板,给模板提供数据的类* smarty执行时,读取模板文件,将模板文件替换成可执行的php文件。server真正执行的文件是处理后的文件。*/
class MiniSmarty {//模板文件路径var $template_dir = "./templates/";//模板文件被替换后的文件路径var $templates_c_dir = "./templates_c/";//存放变量值var $tpl_vars = array ();//主要模拟2个方法/*** 加入数据* 參数1:键*   參数2:值,默觉得null*/function assign($tpl_var, $var = null) {if ($tpl_var != '') {$this->tpl_vars[$tpl_var] = $var; //将数据加入到数组中}}/*** 显示数据* 參数1:显示到哪个模板文件里*/function display($tpl_file) {//获得模板文件的路径$tpl_file_path = $this->template_dir . $tpl_file;//获得模板文件被编译后的文件路径$compile_file_path = $this->templates_c_dir . "com_" . $tpl_file . ".php";//推断文件是否存在if (!file_exists($tpl_file_path)) {return false;}//不用每次都生成编译文件,仅仅有编译文件不存在或者模板文件被改动了才生成新的编译文件//相当于缓存了编译文件//filemtime函数:获得文件的生成时间if (!file_exists($compile_file_path) || filemtime($tpl_file_path) > filemtime($compile_file_path)) {//读取模板文件的内容$fpl_file_content = file_get_contents($tpl_file_path);$newStr = myReplace($fpl_file_content);//将替换后的字符串生成新的文件,也就是编译后的文件file_put_contents($compile_file_path, $newStr);}//引入编译后的文件include $compile_file_path;}/*** 对模板文件里的内容进行替换,获得新的字符串*/function myReplace($fpl_file_content) {$pattern = array ('/\{\s*\$([a-zA-Z_][a-zA-Z0-9_]*)\s*\}/i');$replace = array ('<?php echo $this->tpl_vars["${1}"]  ?>');$newStr = preg_replace($pattern, $replace, $fpl_file_content);return $newStr;}
}
?>
preg_replace方法介绍:
    參数1:替换的规则
    參数2:替换成的内容
    參数3:替换操作的内容
5.执行结果
    标题和内容都显示出来了

结论:
    真正执行的文件,既不是index.php,也不是intro.php,而是二者通过smarty作用后的文件:
com_intro.tpl.php。这个文件里数据来源于index.php,显示的布局来自intro.tpl,中间的桥梁是smarty。
    smarty的作用是接受数据、填充数据(替换模板中的占位符)、并载入替换后的文件。
三、解说smarty使用细节
1.怎样配置smarty?
    解压后,将libs目录复制到项目目录下就可以,然后再创建2个目录templates和templates_c,分别放模板文件和模板编译后文件。
2.使用smarty注意事项
①替换变量的标示符。
    由于默认的表示符是{}这个和style样式中的{}发生冲突,所以须要改动一下默认的标识符,一般改动为:{<>}
②改动标识符的方法。
    方法一:直接改动smarty类源代码:不推荐。
    方法二:使用smarty提供的方法进行改动。
    $smarty->left_delimiter="{<";

$smarty->right_delimiter=">}";

③smarty的一些基本配置
    $smarty->template_dir="./templates";//模板路径
    $smarty->compile_dir="./templates_c";//编译路径
    $smarty->caching=false;    //是否使用缓存

$smarty->cache_dir="./smarty_cache";//假设使用缓存的话:缓存的路径

3.smarty模板技术分配变量的细节问题
    一句话:能够分配php支持的各种数据。
    php基本数据:int double string bool
    复合数据类型:array object
    特殊数据类型:resource null

smarty模板引擎(一)基础知识相关推荐

  1. 模板引擎Freemarker基础知识

    Freemarker基础知识 Freemarker是什么 FreeMarker 基础指令 List指令 遍历Map数据 if指令 其它指令 运算符 空值处理 内建函数 入门Demo 要导入的依赖 配置 ...

  2. php中smarty模板的优点,php的smarty模板引擎有哪些特点

    php的smarty模板引擎有哪些特点2020-06-30 16:46:07 php的smarty模板引擎的特点有:1.运行速度快:2.不需要多余的模板语法解析:3.仅对修改过的模板文件进行重新编译: ...

  3. smarty模板引擎--php高级最详细教程

    Smarty(模板引擎) 原创 一.什么是模板引擎? Smarty是一个php模板引擎.更准确的说,它分开了逻辑程序和外在的内容,提供了一种易于管理的方法.可以描述为应用程序员和美工扮演了不同的角色, ...

  4. php模板引擎smarty案例下载,PHP – Smarty模板引擎 – Download下载 – 2.6.22 | 学步园...

    PHP - Smarty模板引擎 - Download下载 - 2.6.22 [PHP - Smarty模板引擎 - 官方网站] [PHP - Smarty模板引擎 - 下载地址] http://sm ...

  5. PHP Smarty 模板,PHP Smarty模板引擎

    前言:概念上的东西就简单过一下,细节上的东西就不深究了.作下读书笔记,且该知识点是后续学习MVC框架的一部分. 1.什么是模板引擎 1.1.网站页面模板:即每个页面仅是一个板式,包括结构.样式和页面布 ...

  6. php中smarty末班引擎,php之smarty模板引擎

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

  7. smarty模板引擎原理解析

    //php 控制器文件 <?php //引入模板引擎文件 include("20130304.php"); $smarty = new TinySmarty(); $qq_n ...

  8. CodeIgniter_2.2.0整合smarty模板引擎

    CodeIgniter_2.2.0整合smarty模板引擎 转载于:https://blog.51cto.com/murongwenxian/1605204

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

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

最新文章

  1. Cocos2d-x Eclipse下程序运行产生错误Effect initCheck() returned -1
  2. 操作符重载——C/C++学习笔记
  3. Fast Flux技术——本质就是跳板,控制多个机器,同一域名指向极多的IP(TTL修改为0),以逃避追踪...
  4. java多线程init,Java多线程 - 线程 - 初识
  5. 贪心算法之——会场安排(nyoj14)
  6. ACM-ICPC 2018 沈阳赛区网络预赛 Spare Tire(容斥+公式推)
  7. IJCAI 2019 论文解读 | 基于超图网络模型的图网络进化算法
  8. 用户界面设计的一些方法和基本原则
  9. matlab eig 复杂度,MATLAB中的eig函数
  10. 【VirtualBox】VirtualBox的桥接网络模式,为啥网络不稳定?
  11. Git仓库迁移,包括所有的分支、标签、日志
  12. 浏览器展示CSS伪类的动画和过渡效果应用
  13. 关于Romoting又一例
  14. thinkphp 6.x 5.x nginx php fpm 配置
  15. Windows10 LTSB/LTSC版安装应用商店与UWP
  16. 代理模式,明星经纪人--Java
  17. 微信小程序开发详细步骤解决方案
  18. 网络攻防原理及应用 知识梳理
  19. 波恩大学癫痫脑电和波士顿儿童医院脑电信号数据集下载
  20. 实战:垃圾站建站大法 疯狂掠夺百度流量

热门文章

  1. 英国电信移除华为设备后,多家运营商继续与华为合作,并达成20亿英镑协议...
  2. python中对两个 list 求交集,并集和差集
  3. 赛门铁克调研发现越来越多的物联网设备被用于实施DDoS攻击
  4. 寻路之 A* 搜寻算法
  5. jenkins slave problem :Unsupported major.minor version 52.0
  6. Android Robolectric 加载运行本地 So 动态库
  7. Poj(2225),三维BFS
  8. Android ANT多渠道打包
  9. 红杉千万美元投资壁虎烘热游戏内置广告
  10. .Net FSO简单小结(简单到不能再简单了)