模板引擎的工作原理

  1. 实现HTML代码和PHP代码分离的目的是:实现前端设计人员和PHP程序员的分离。<br /> 多数Web开发人员要么是精通网页设计,能够设计出漂亮的网页外观,但是编写的PHP代码很糟糕;要么仅熟悉PHP编程,能够写出健壮的PHP代码,但是设计的网页外观很难看。具备两种才能的开发人员很少见。<br /> PHPHTML混合页面,分成两个独立的页面:<br /> 一个是HTML静态页面(视图文件、模板文件),扩展名是.html,包含HTMLCSSJS<br /> 一个是纯PHP程序页面(控制器文件),扩展名是.php,主要PHP代码。<br /> 运行时,将HTML文件代码,包含到PHP文件中。<br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/135020/1596638981235-f9e408e0-10f2-49e1-baa6-e8032c9519fc.png#align=left&display=inline&height=334&margin=%5Bobject%20Object%5D&name=image.png&originHeight=334&originWidth=643&size=145268&status=done&style=none&width=643)<br /> <br />

ü 首先,视图中的典型PHP代码是这样的:<?php echo $name ?>
ü 再者,前端工程师能看得懂的、比较喜欢的HTML标签形式的代码是这样的:{$name}
ü 最后,我们把 {$name} 替换成 <?php echo $name ?>,就实现了PHP代码和HTML代码的完全分离。
ü 模板引擎的原理:就是替换,就是将 {$name} 转换成 <?php echo $name?> 才能被PHP识别并解析。
ü 如何替换呢?使用PHP替换函数str_replace(),将 ”{“ 替换成 ”<?php echo “,将”}”替换成”?>”。

image.png

ü Smarty,是模板引擎鼻祖。其它的模板引擎都是基于Smarty开发的。
ü Template Lite
ü TinyButStrong
ü XTemplate
ü Savant
ü phemplate
ü Dwoo
ü Sugar
ü Twig,symfony框架默认的模板引擎;
ü FXL Template
ü H2o
ü ns-template
ü Blade:laravel框架默认的模板引擎。


  1. Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。

image.png

image.png

ü 在Smarty中,默认使用 “{“ 和 “}” 作为变量的定界符。但这样,会与CSS、JS中的大括号冲突。
ü 左定界符:$smarty->left_delimiter = “string”
ü 右定界符:$smarty->right_delimiter = “string”
image.png

目录类别 默认目录 修改方法 查看方法
Smarty默认模板目录 ./templates $smarty->setTemplateDir() $smarty->getTemplateDir()
Smarty默认配置目录 ./configs $smarty->setConfigDir() $smarty->getConfigDir()
Smarty默认编译目录 ./templates_c $smarty->setCompileDir() $smarty->getCompileDir()
Smarty默认缓存目录 ./cache $smarty->setCacheDir() $smarty->getCacheDir()
Smarty默认插件目录 ./libs/plugins $smarty->setPluginsDir() $smarty->getPluginsDir()


查看Smarty常用目录配置:Smarty类文件中的__construct()构造方法

image.png

ü PHP中的所有变量,都可以在视图文件中使用;
ü 使用 $smarty->assign() 向Smarty模板传递普通变量;
ü 使用 $smarty->display() 显示指定的视图文件;
ü 在Smarty模板中,使用”[ ]”或点”.”来访问数组元素;
ü 在Smarty模板中,使用”->”来访问对象的属性和方法。
image.png

ü {$smarty.get} 访问$_GET数组
ü {$smarty.post} 访问$_POST数组
ü {$smarty.request} 访问$_REQUEST数组
ü {$smarty.cookie} 访问$_COOKIE数组
ü {$smarty.session} 访问$_SESSION数组
ü {$smarty.server} 访问$_SERVER数组
ü {$smarty.files} 访问$_FILES数组
image.png

语法:{$smarty.const.预定义常量}
image.png

语法:{$smarty.now}
image.png

  1. 网站上有一些比较简单的变量信息,美工人员可以自行定义并调用。这样可以脱离程序员的依赖,工作比较有主动权。

ü 配置文件默认目录:./configs
ü 设置配置文件目录:$smarty->setConfigDir()
ü 读取配置文件目录:$smarty->getConfigDir()
ü 配置文件扩展名:.ini或.conf
ü 配置文件中注释:#
ü 配置文件变量分组:[ ]
ü 语法格式:配置名 = 变量值
ü 变量不带$符号,变量值不带引号
image.png

ü 载入配置文件:{config_load file = “配置文件路径”}
ü 语法格式一:{#配置文件变量名#}
ü 语法格式二:{$smarty.config.配置变量}
image.png

载入分组配置文件变量:{config_load file = “配置文件路径” section = “分组名”}
image.png

ü 语法格式1:{foreach $arr as $key=>$value} {/foreach}
ü 语法格式2:{foreach from=$myarr key=”mykey” item=”myitem”}{/foreach}
ü 提示:foreach可以遍历所有类型的数组,包括:枚举数组、关联数组、混合数组

image.png

image.png

ü @key:输出当前值的索引,可能是整型索引,也可能是字符索引;
ü @index:当前数组索引,从0开始计算;
ü @iteration,当前循环的次数,从1开始计算;
ü @first:当首次循环时,值为true;
ü @last:当最后一次循环时,值为true;
ü @total:是整个循环的次数,可以在foreach内部或外部使用;
image.png
image.png

ü Section循环就是PHP中的for循环。
ü PHP中的for循环对于foreach来说,有什么特点?
ü for循环可以控制循环起点,而foreach不可以;如:$i = 1 或 $i = 3
ü for循环可以指定步长值,而foreach不可以;如:$i += 2 或 $i += 3
ü for循环可以控制循环次数,而foreach不可以;如:$count = 10 或 $count = 5
ü 注意:section循环只能遍历枚举数组。
image.png
name= 随便命名
loop= 最后一个循还号
start= 起点
step= 跳的值的个数
max= 最大输出几个值
show=

image.png

image.png

image.png


image.png

image.png

image.png
image.png

ü 变量修饰器可以用于格式化变量;
ü 使用修饰器,需要在变量的后面加上|(竖线)并且跟着修饰器名称。
ü 修饰器可能还会有附加的参数以便达到效果。
ü 参数会跟着修饰器名称,用:(冒号)分开。
ü 同时,默认全部PHP函数都可以作为修饰器来使用 (不止下面的),而且修饰器可以被联合使用。
ü 修饰器可以作用于任何类型的变量,数组或者对象。
image.png

调节器 含义 PHP函数 示例演示
upper 将变量值转成大写字母。 strtoupper() {$title|upper}
lower 将变量值转成小写字母 strtolower() {$title|lower}
capitalize 每个单词的第一个字母大写 ucwords() {$title|capitalize}
nl2br 将变量中”\n”回车
全部转换成HTML的
nl2br() {$title|nl2br}
replace 对变量进行简单的查找和替换 str_replace() {$title|replace:’a’:’b’}
date_format 将日期和时间格式化成strftime()的格式。 strftime() {$time|date_format:%Y-%m-%d}
truncate 截取字符串到指定长度,默认长度是80 substr() {$title|truncate:80:’…’}

image.png

image.png

image.png
image.png

ü smarty中的truncate调节器,对应PHP的substr()函数或mb_substr()函数。
ü substr()函数是按字节截取字符串;
ü mb_substr()函数是按字符截取字符串,但需要开启PHP的扩展。
image.png
image.png
image.png