原理:
它是一个,将内容和表现分开的模板引擎,
有别人封装好的smarty引擎,可以下载安装就可以使用,那么就咱们使用别人封装好的smarty

先要引入别人封装好的smarty
smarty的原理是将内容和表现,那么就肯定得有内容和表现,表的内容就是(php里的数据)表现是值html,就是不在html中写入php代码,而且还要将php数据显示到html中。smarty做的是什么呢smarty做的是将在html中的界符号( {} )替换成php能够识别的php代码
demo(html写的):

将这个{$demo} 替换成php能认识的标签(<?php echo $demo ?>)
调用smarty的里的(php写的)

基本原理就是这样 显示的是自动将表内容和表现混写的页面(第三个页面)
主要
变量
smarty中变量有3中,普通变量、配置变量、保留变量
普通变量就是我们自己定义的变量
方法一:在PHP中定义 $smarty->assign('name','tom');//将tom赋给name,
方法二:可以在模板定义
语法:{assign var='变量名' value='值'} //在html中直接定义
简化写法: {$sex='男'} //在html中直接定义
保留变量 (Smarty中有一个特殊的保留变量(内置变量),类似于PHP中的所有的超全局变量、常量、时间等信息) 这些都是加载smarty后直接写可以

配置变量 (从配置文件中获取变量值,配置文件默认的文件夹是(configs)
1、在站点下创建配置文件夹 configs
2、在configs
目录下创建smarty.conf文件 (这样写加载进来的时候方便)
{config_load file='smarty.conf'} <!--引入配置文件-->
2、获取配置文件中的值的方法有两种
第一:{#变量名#} 第二:{$smarty.config.变量名}
例题: 配置文件 在配置文件中,‘[ ]’表示配置文件的段落
color=#FF0000 #全局的一定要写在节的前面
size=30px
[spring] # 配置文件中的段落
color=#009900;
size=20px;
[winter] #配置文件中[]表示节
color=#000000;
size=5px;
HTML页面
{config_load file='smarty.conf' section='winter'}//通过section引入配置文件中的段落(节)
<style>
body{
color:{#color#}; //color:=color:#000000;
font-size: {$smarty.config.size} //font-size:=size=5px;
}
</style>
运算符

判断
{if 条件} //if判断
{elseif 条件}
{else}
{/if}
数组
smarty中访问数组的方式有两种
数组[下标] //数组数组的定义和,定义变量差不多,都在php和html中定义
数组.下标
循环
smarty中支持的循环有:{for}、{while}、{foreach}、{section}。对于开发来说用的最多就是{foreach}循环
{for 初始值 to 结束值 [step 步长]} //for循环
{/for}
默认步长是1
{while 条件} //while 循环
{/while}
{foreach 数组 as $k=>$v} //既能遍历关联数组也能遍历索引数组 用的多
// foreach 循环
{foreachelse}
没有数组输出
{/foreach}
foreach的属性 @index:从0开始的索引,@iteration:从1开始的编号,@first:是否是第一个元素,@last:是否是最后一个元素
{section name=自定义名字 loop=数组} // section 循环
{/section} //section不支持关联数组,只能遍历索引数组
变量修饰器
变量修饰器的本质就是PHP函数,用来转换数据
转成大写:{'abc'|upper} <br> //ABC
转成小写:{'ABC'|lower} <br> //abc
默认值:{$add|default:'地址不详'}<br> //地址不详
去除标签:{'<b>你好吗</b>'|strip_tags}<br> //你好吗
实体转换:{'<b>你好吗</b>'|escape}<br> //<b>你好吗</b>
日期:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'} //年-月-日 时:分:秒
|称为管道运算符,将前面的参数传递后后面的修饰器使用
自定义变量修饰器
变量修饰器存放在plugins目录中
规则:
- 文件的命名规则:modifier.变量修饰器名称.php
- 文件内方法命名规则:smarty_modifier_变量修饰器名称(形参...){}
例题
1、在plugins目录中创建modifier.修饰器名字.php页面
function smarty_modifier_修饰器名字(参数,参数,...){
return //做什么
2、在模板中调用
{第一个参数|修饰器名字:参数:参数} //参数之间用冒号分隔
避免Smarty解析
smarty的定界符和css、js中的大括号产生冲突的时候,css、js中的大括号不要被smarty解析
方法一:更换定界符
方法二:左大括号后面添加空白字符
方法三:{literal} {/literal}
smarty不解析{literal} {/literal}中的内容 //推荐
缓存
缓存:页面缓存、空间缓存、数据缓存。smarty中的缓存就是页面缓存
smarty的缓存是页面缓存。
开启缓存
$smarty->caching=true|1; //开启缓存
缓存的更新
方法一:删除缓存,系统会重新生成新的缓存文件
方法二:更新了模板文件,配置文件,缓存自动更新
方法三:过了缓存的生命周期,默认是3600秒
方法四:强制更新
$smarty->force_cache=true; //强制更新缓存 一般设条件使用
缓存的生命周期
$smarty->cache_lifetime=-1 | 0 | N
-1:永远不过期
0:立即过期
N:有效期是N秒,默认是3600秒 //推荐
局部不缓存
局部不缓存有两种方法
1、变量不缓存 {$变量名 nocache}
2、整个块不缓存 {nocache} {/nocache} //中间的内容 不会被缓存
清除缓存
$smarty->clearCache(模板,[识别id]) //不知道表示符的话,看下面
$smarty->clearAllCache(); //清除所有缓存
例子 缓存分页
:通过$smarty->display(模板,识别id)。通过识别id来缓存分页、集合
<?php
require './Smarty/smarty.class.php';
$smarty=new Smarty();
$smarty->caching=1;
$smarty->display('7-demo.html',$_GET['pageno']); //后面获取的get,就是识别id
html页面
<body>
这是第{$smarty.get.pageno}页
</body>
根据,页面请求来的不同get请求的pageno,pageno每改变一次,就会缓存一次,生成一个缓存文件,可以设置识别id(_GET['pageno']);)
后面的_GET['pageno']);就是识别id