1.概述:
官方:Smarty是一个PHP的模板引擎。业务逻辑和显示逻辑分离,是Smarty的一个设计理念。
啥意思?就是准备数据,给smarty显示。smarty里面写好html,css,js等前端样式,给个占位符:如<h1>{$a}<h1/>,在业务代码把$a的值塞进去显示就行了。
2.特性:
非常快速。比PHP内嵌到HTML中的做法要有效率高
支持条件判断语句
内置很多方法,可以调用
3.具体用法参考官网:
https://www.smarty.net/docs/zh_CN/
4.适用场景
非前后分离模式。企业一些老系统采用的不是前后分离模式,需要维护还是得会。
个人觉得,smarty使用的人逐渐少了,做前端还是得向vue,react,angular上面靠。
开发逐渐都要以组件化的思维。前端是,后端服务也是,现在流行的微服务实际上也是以组件化的思维,讲究组件复用。当然如果系统业务比较少,没必要搞分治,微服务这套了。
5.使用:
(1).建立php文件:
包含smarty类文件 include(Smarty/Smarty.class.php);
实例化smarty对象 $smarty = new Smarty();
通过smarty对象定义模板文件保存位置(及其它属性)
为模板定义变量 或为模板传数据(一般是从数据库中查询的数据)
指定调用的html文件即模板文件
(2).创建模板文件:
在模板文件中显示数据
第一步、定义php文件
<?php
//1、包含Smarty类文件
require("smarty/Smarty.class.php");
//2、实例化Smarty类
$smarty = new Smarty();//设置各个目录的路径,这里是安装的重点
$smarty->template_dir ="./templates"; //模板存放位置
$smarty->compile_dir ="smarty/templates/templates_c"; //编译路径
$smarty->config_dir = "smarty/templates/config"; //配置文件存放位置
configs
$smarty->cache_dir ="smarty/templates/cache"; //缓存目录存放位置
//smarty模板有高速缓存的功能,如果这里是true的话即打开caching,但是 会造成网页不立即更新的问题,当然也可以通过其他的办法解决
$smarty->caching = false;
$smarty->left_delimiter = "{#"; //重新定义边界,因为默认边界“{}“符,在html 页面中嵌入js脚本文件编写代码段时使用的就是”{}“符,自定义边界符还可以 是<{ }>, {/ /} 等
$smarty->right_delimiter = "#}";
$hello = "Hello World!";//赋值
$smarty->assign("hello",$hello);//引用模板文件 为模板传值
$smarty->display('index.tpl'); //调用模板
?>
执行index.php就能看到Hello World!了
(3).基本语法
1) 注释
语法:{* 注释内容 *}
2) assign()
注解:给模板进行变量赋值;
3) display()
注解:显示模板;
4) fetch()
注解:获得模板编译输出后的结果,类型为字符串,等同于 echo display();
(4).变量来的来源
1) PHP分配
2) 配置文件
① 引入配置文件
② 使用配置文件中变量
`注意:配置文件中(cfg.php)的写法如下
扩展:smarty 中的文件包含写法:
3) 保留变量
(5).变量调节器 lower
1) date_format
2) Default
注解:当变量是unset或者empty的字符串时,默认值将显示。
(6).内建函数
1) config_load
注解:{config_load}用于从配置文件中 加载配置变量#variables#。
(参考demo如上配置)
2) foreach
注解:建议采用这种(smarty 3.0)写法
3) include
注解:{include}用于载入其他模板到当前模板中
(参考demo如上配置)
4) if else if 手册自己做
5) literal
注解:{literal}可以让一个模板区域的字符原样输出。
6) php
重要说明
Smarty已经废弃{php}标签,强烈建议不要使用。