PHP之Smarty
Smarty简介
smarty的引入
1. 为了分工合作,模板页面中最好不要出现php代码
2.需要将表现和内容相互分离
3.通过smarty把php和html页面显示在页面上
官方smarty
plugins:自定义插件
sysplugins:系统插件
Smarty.class.php:Smarty核心文件
smarty的属性和方法
class Smarty{
public $left_delimiter="{";//左界定
public $right_delimiter="}";//右界定
protected $template_dir=array('./templates/');//默认模板文件目录
protected $compile_dir='./templates_c';//默认混编目录
protected $config_dir=array('./configs/');//默认配置目录
protected $cache_dir='./cache/';//默认缓存目录
public function setTemplateDir(){}//设置模板文件夹
public function setConfigDir(){}//设置配置文件夹
public function setCompileDir(){}//设置混编文件夹
public function setCacheDir(){}//设置缓存文件夹
}
smarty简单的操作
1. 将libs目录拷贝到站点下,改名为smarty
2. 创建模板目录templates
3. 创建混编目录templates_c
4. 在站点下创建1-demo.php
5. 在模板下创建1-demo.html
require './smarty/Smarty.class.php';
$smarty = new Smarty();
$smarty->assign('title','锄禾');
$smarty->display('1-demo.html');
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{$title}
</body>
</html>
smarty的注释
语法:{* *}
注意:smarty注释在源码中看不见
smarty的注释只要在左右定界符里面加上*就可以了
smarty变量
smarty中变量有3种,普通变量、配置变量、保留变量
普通变量
普通变量就是我们自定义的变量
方法一:在PHP中定义
$smarty->assign('name','tom');//给变量赋值
方法二:可以在模板中定义
语法:{assign var='变量名' value='值'}
例如:{assign var='sex' value='男'}
简化写法:{$add='北京'}
保留变量
smarty中有一个特殊的保留变量(内置变量),类似于PHP中所有的超全局变量、常量、时间等信息
表达式 | 描述 |
---|---|
{$smarty.get.name} | 获取get提交的name的值 |
{$smarty.post.name} | 获取post提交的name的值 |
{$smarty.request.name} | 获取get和post提交的name的值 |
{$smarty.cookies.name} | 获取cookie中name的值 |
{$smarty.session.name} | 获取session中name的值 |
{$smarty.const.name} | 获取常量name |
{$smarty.server.DOCUMENT_ROOT} | 获取服务器的虚拟目录地址 |
{$smarty.config.name} | 获取配置文件中的值 |
{$smarty.now} | 时间戳 |
{$smarty.ldelim} | 获取左界定 |
{$smarty.rdelim} | 获取右界定 |
配置变量
从配置文件中获取变量值,配置文件默认的文件夹是configs
1. 在站点下创建配置文件夹configs
2. 在configs目录下创建smarty.conf文件
color=#FF0000
size=50px
[spring] # 配置文件中的段落也称作节
color=#009900
size=20px
[winter]
color=#000005
size=5px
HTML页面
<!DOCTYPE html>
<html lang="en">
<!--config_loads默认目录就是当前目录的configs目录
它会自动找当前目录的configs,所以不需要写./configs/的文件-->
<!--这里section引入了节-->
{config_load file='smarty.conf' section=''}
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
color: {#color#};
font-size:{$smarty.config.size};
}
</style>
</head>
<body>
{if $smarty.get.score gt 90}
A
{elseif $smarty.get.score gte 80}
B
{else}
C
{/if}
锄禾日当午
</body>
</html>
PHP页面
require './smarty/Smarty.class.php';
$smarty = new Smarty();
$smarty->assign('title','锄禾');
$smarty->display('1-demo.html');
小结:
1. 要使用配置文件中的值,首先必须引入配置文件,通过{config_load}标签引入
2. 获取配置文件中的值的方法有两种
(1):{#变量名#}
(2):{$smarty.config.变量名}
配置文件中的注意事项:
1. 全局的一定要写在节的前面
2. 配置文件中[]表示节
3. 配置文件中的注释是#
smarty运算符
运算符 | 描述 |
---|---|
eq | 相等 |
neq | 不等于 |
gt | 大于 |
lt | 小于 |
lte | 小于等于 |
gte | 大于等于 |
is even | 是偶数 |
is odd | 是奇数 |
is not even | 不是偶数 |
is not odd | 不是奇数 |
not | 非 |
mod | 求模取余 |
div by | 被整除 |
is [not] div by | 是否被某数整除 |
判断
语法:
{if 条件}
{elseif 条件}
{else}
{/if}
数组
smarty中访问数组的方式有两种:
1. 数组[下标]
2. 数组.下标
PHP页面
require './smarty/Smarty.class.php';
$smarty = new Smarty();
$stu = ['tom','berry'];//索引数组
$stu1 = array('name'=>'zhangsan','age'=>22);
$goods = array(
array('name'=>'手机','price'=>3352),
array('name'=>'钢笔','price'=>10)
);
$smarty->assign('stu',$stu);
$smarty->assign('stu1',$stu1);
$smarty->assign('goods',$goods);
$smarty->display('2-demo.html');
HTML页面
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
学生:{$stu[0]}-{$stu.1}<br>
学生1:{$stu1['name']}的年龄是{$stu1.age}<br>
商品:
<ul>
<li>{$goods[0]['name']}</li>
<li>{$goods.0.price}</li>
<li>{$goods.1['name']}</li>
<li>{$goods[1].price}</li>
</ul>
{for $i=1 to 5}
{$i}:锄禾日当午<br>
{/for}
<hr>
{for $i=1 to 5 step=2}
{$i}:锄禾日当午<br>
{/for}
</body>
</html>
循环
smarty中支持的循环有:{for}、{while}、{foreach}、{section}。用的最多的是foreach循环
语法:
{foreach 数组 as $k=$v}
{foreachelse}
没有输出
{/foreach}
foreach的属性:
@index:从0开始的索引
@iteration:从1开始的编号
@first:是否是第一个元素
@last:是否是最后一个元素
{for $i to 5}
{$i}:锄禾日当午<br>
{/for}
<hr>
{for $i to 5 step=0}
步长为2的时候{$i}:锄禾日当午<br>
{/for}
for语法:
{for 初始值 to 结果值 [step 步长]}
{/for}
while语法:
{while 条件}
{/while}
注意:while条件有的和php类似
自定义变量修饰符
变量修饰符存放在plugins目录中
规则:
1. 文件的命名规则:modifier.变量修饰器名称.php
2. 文件内方法命名规则:smarty_modifier_变量修饰器名称(形参...){}
避免smarty解析
smarty的定界符和css、js、中的大括号产生冲突的时候,css、js中的大括号不要被smarty解析
1. 更换定界符
2. 左大括号后面添加空白符
3. 用{literal}{/literal}来包含js和CSS
缓存
页面缓存,空间缓存,数据缓存,smarty中的缓存就是页面缓存
开启缓存:$smarty->caching=true或者1 //开启缓存
缓存的更新:
1. 删除缓存,系统会重新生成新的缓存文件
2. 更新模板文件,配置文件,缓存自动更新
3. 过了缓存的生命周期,默认是3600秒
4. 强制更新:$smarty->force=true;
5. 缓存的生命周期:$smarty->cache_lifetime=-1|0|N
-1:永远不过期
0:立即过期
N:有效期是N秒,默认是3600秒
局部不缓存:
1. 变量不缓存 {$变量名 nocache}
2. 整个块不缓存:{nocache} {/nocache}
例子:
不缓存:{$smarty.now nocache}
不缓存:{nocache}
{$smarty.now}<br>
{/nocache}
缓存分页
$smarty->caching=1;
$smarty->display('模板页面','识别id');
缓存集合
$smarty->display('模板页面','$color|$size');
清楚缓存
$smarty->clearCache('模板',[识别id]);
$smarty->clearAllCache();//清楚所有缓存