smarty模板的作用可以让前端和后端分离(也就是前端的显示页面和后端的php代码)。
smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹
(1)libs核心文件夹
(2)int.inc.php这是入口文件
(3)plugins:自己写的插件文件夹
(4)templates_c:存放编译好的文件
(5)int.inc.php这是入口文件
(6)定义好常量:不能修改
一、如何实现前后分离的原理:
核心是一个类
1.左分隔符{
2.右分隔符}
3.数组(默认空数组):存储变量
4.提供一个方法:向模板中注册变量的方法(assign(名字,值))
方法存在数组中的(找到数组存入变量)
5.还有一个方法:显示模板的(display(模板的名称或是路径))
两个功能:拿模板,解析变量
通过名称就可以找到模板的路径
$url = "模板路径".$name ;
读取模板文件,返回字符串
$str = file_get_contents($url);
将字符串的某些内容作了替换
1.将模板中的"名字"替换成 一段php代码 echo $arr=[名字]
2.将替换好的字符串保存到临时文件或者是编译好的文件
file_put_contents(存放的位置,上面替换好的字符串);
3.将编译好的文件拿到当前页面显示
include(临时文件的目录);
二、怎么用模板?
模板页面
1.引入模板的入口文件
include("入口文件路径位置");
2.直接用对象
提供一个方法:向模板中注册变量的方法(assign(名字,值)
$smarty->assign("ceshi","你好");
提供一个方法:显示模板的(display(模板的名称或是路径))
$smarty->display("ceshi.html");
正常页面
{assign(名字)}
注意:
1.访问的是php的页面,显示的是html页面
2.html用到了外部的样式表,位置是相对于访问的php页面来找外部样式
三、入口文件的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<?php
define(
"ROOT"
,
str_replace
(
"\\"
,
"/"
,dirname(
__FILE__
)).
'/'
);
//常量ROOT中指定项目根目录
//echo str_replace("\\","/",dirname(__FILE__)).'/'; //获取当前文件所在的位置
require
ROOT.
'libs/Smarty.class.php'
;
//加载Smarty类文件
$smarty
=
new
Smarty();
//实例化Smarty对象
define(
"CSS_PATH"
,
"/project/css/"
);
define(
"JS_PATH"
,
"/project/js/"
);
//$smarty -> auto_literal = false; //就可以让定界符号使用空格
$smarty
->setTemplateDir(ROOT.
'templates/'
);
//设置所有模板文件存放位置
//$smarty->addTemplateDir(ROOT.'templates2/'); //添加一个模板文件夹
$smarty
->setCompileDir(ROOT.
'templates_c/'
);
//设置编译过的模板存放的目录
$smarty
->addPluginsDir(ROOT.
'plugins/'
);
//设置为模板扩充插件存放目录
$smarty
->setCacheDir(ROOT.
'cache/'
);
//设置缓存文件存放目录
$smarty
->setConfigDir(ROOT.
'configs/'
);
//设置模板配置文件存放目录
$smarty
->caching = false;
//设置Smarty缓存开关功能
$smarty
->cache_lifetime = 60*60*24;
//设置缓存模板有效时间一天
<br>
//下面的内容是修改左和右的分隔符形式
$smarty
->left_delimiter =
'<{'
;
//设置模板语言中的左结束符
$smarty
->right_delimiter =
'}>'
;
//设置模板语言中的右结束符
?>
|
四、一些注意的点
(1)smarty注释
模板注释被*星号包围,而两边的星号又被定界符包围:
例如:
1
|
{* this is a comment *}
|
注意:smarty注释不会在模板文件的最后输出中出现,这与<!-- HTML 注释-->不同(译注:html注释在页面源码中可见,而smarty注释则不能)也就是:注释只存在于模板里面,而在输出的页面中谁也看不见。
(2)从配置文件读取的变量
配置文件的内容:
1
2
3
4
5
6
7
|
config file - foo.conf:
pageTitle =
"This is mine"
bodyBgColor =
'#eeeeee'
tableBorderSize = 3
tableBgColor =
"#bbbbbb"
rowBgColor =
"#cccccc"
|
主页中写的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
//下面为配置文件变量“井号方法”的示例
{config_load file=
'foo.conf'
}
<html>
<title>{#pageTitle#}</title>
<body bgcolor=
"{#bodyBgColor#}"
>
<table border=
"{#tableBorderSize#}"
bgcolor=
"{#tableBgColor#}"
>
<tr bgcolor=
"{#rowBgColor#}"
>
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//下面为$smarty.config方法的示例:
{config_load file=
'foo.conf'
}
<html>
<title>{
$smarty
.config.pageTitle}</title>
<body bgcolor=
"{$smarty.config.bodyBgColor}"
>
<table border=
"{$smarty.config.tableBorderSize}"
bgcolor=
"{$smarty.config.tableBgColor"
}>
<tr bgcolor=
"{$smarty.config.rowBgColor}"
>
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
|
(3)加载配置文件后,配置文件中的变量需要用两个井号"#"包围或者是smarty的保留变量$smarty.config.来调用
{$smarty.now}取得当前时间戳,可以直接通过变量调节器date_format[格式化日期]输出显示
date_format转换标记:
- %a - 当前区域星期几的简写
- %A - 当前区域星期几的全称
- %b - 当前区域月份的简写
- %B - 当前区域月份的全称
- %c - 当前区域首选的日期时间表达
- %C - 世纪值(年份除以 100 后取整,范围从 00 到 99)
- %d - 月份中的第几天,十进制数字(范围从 01 到 31)
- %D - 和 %m/%d/%y 一样
- %e - 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31')
- %g - 和 %G 一样,但是没有世纪
- %G - 4 位数的年份,符合 ISO 星期数(参见 %V)。和 %V 的格式和值一样,只除了如果 ISO 星期数属于前一年或者后一年,则使用那一年。
- %h - 和 %b 一样
- %H - 24 小时制的十进制小时数(范围从 00 到 23)
- %I - 12 小时制的十进制小时数(范围从 00 到 12)
- %j - 年份中的第几天,十进制数(范围从 001 到 366)
- %m - 十进制月份(范围从 01 到 12)
- %M - 十进制分钟数
- %n - 换行符
- %p - 根据给定的时间值为 `am' 或 `pm',或者当前区域设置中的相应字符串
- %r - 用 a.m. 和 p.m. 符号的时间
- %R - 24 小时符号的时间
- %S - 十进制秒数
- %t - 制表符
- %T - 当前时间,和 %H:%M:%S 一样
- %u - 星期几的十进制数表达 [1,7],1 表示星期一
- %U - 本年的第几周,从第一周的第一个星期天作为第一天开始
- %V - 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
- %W - 本年的第几周数,从第一周的第一个星期一作为第一天开始
- %w - 星期中的第几天,星期天为 0
- %x - 当前区域首选的时间表示法,不包括时间
- %X - 当前区域首选的时间表示法,不包括日期
- %y - 没有世纪数的十进制年份(范围从 00 到 99)
- %Y - 包括世纪数的十进制年份
- %Z 或 %z - 时区名或缩写
- %% - 文字上的 `%' 字符
例如:
1
2
3
4
|
<?php
$config
[
'date'
] =
'%I:%M %p'
;
$smarty
->assign(
'config'
,
$config
);
?>
|
正常页面中的
1
2
3
|
{
$smarty
.now|date_format}
{
$smarty
.now|date_format:
"%D"
}
{
$smarty
.now|date_format:
$config
.
date
}
|
根据上面的字母提示可以算出输出信息。