在smarty模版中无非就是”变量”和”函数”两种语法格式。在Smarty模版中又分为三种可用的变量形式。
- 从PHP中分配变量
- 从配置文件中读取变量
- 在模版中使用保留变量
1. 从PHP中分配变量
前面的博客介绍过了
2. 从配置文件中读取变量
为Smarty模版声明配置文件以后,需要用户可以改变的行为,就在配置文件中定义一个对应的变量,并在模版中读取后使用。如果用户需要修改界面外观。只要简单地修改一下配置文件,用户就可以自定义模版风格。不过需要注意一下几个问题:
- 配置文件需要放在什么位置,需要设置多少个配置文件,以及如何去命名?
- 配置文件该如何编写?
- 如何在模版中找到配置文件
- 如何在模版中读取配置文件
2.1 配置文件语法格式
配置文件在Smarty模版中的应用,有利于设计者管理文件中的模版全局变量。
比如我们可以存储页面标题,用户消息,以及必要几种存储的任何信息。例如模版外观配色的色彩变量。如果我们要更改外观,只需修改这个配置文件就可以了。下面例如foo.conf配置文件:
#global variables #在每行前面使用"#"表示注释,这时标注全局变量
pageTitle = "Main Menu" #在全局声明一个pageTitle,值使用双引号括起来
bodyBgColor = #000000 #声明一个全局变量bodyBgColor,管理模版背景色
tableBgColor = #000000 #全局变量tableBgColor,管理模版中表格背景色
rowBgColor = #00ff00 #全局变量rowBgColor,管理模版中表格的每行背景色
[Customer] #定义节的名字,一下都是customer节中的局部变量
pageTitle = "Customer Info" #本节中声明的局部变量,覆盖同名的全局变量
[Login] #定义另一个节的名字,一下都为Login中的局部变量
pageTitle = "Login" #本节中声明的局部变量,定义页面的标题
focus = "username" #本节中声明的局部变量
Intro = """This is a value that spans more #使用三个双引号可以将一个字符串声明在多行
than one line.you must enclose #声明三个双引号中的第二行字符串
it in triple quotes.""" #声明在三个双引号中的最后一行,以三个双引号结束
配置文件的名称可以是任意命名,后缀名就随着当前应用的操作系统中常用的配置文件命名方式。例如windows中使用”.ini”,Linux中使用”.conf”作为配置文件的后缀名称。
配置文件存储的目录是通过smarty对象中的$config_dir属性指定的值,默认为“./configs”。可以通过
$smarty->setConfigDir("./configs")
来设置- 配置文件中使用”#”来添加注释。使用变量名=值的格式。配置文件变量值能够在引号中使用。但是没有必要。可以通过三引号(“”“)来包含要声明多行的字符串
- 通过中括号”[]”来包含起来的项称为“节”。在节中声明的变量都属于局部变量。之外的都是全局的。
- 当某个变量名既是全局变量又是局部变量,则局部变量会被优先使用。当变量名称相同时,最后的一个将被使用
2.2 加载配置文件
在smarty中加载配置文件的方法:
{config_load file="foo.conf"} {*在当前模版中加载配置文件foo.conf中的全局变量*}
{config_load "foo.conf"}{*samrty3中的简写形式*}
如果要加载特定的节,则需要使用section属性指定
{config_load file=”foo.conf” section=”Customer”}{加载foo.conf中的第一节Customer中的变量}
2.3 在模版中引用配置文件中的变量
通过两个”#”或者是smarty的保留变量$smarty.config来调用。通常可以通过修改文件中的变量值来改变输出页面的样式。当然,你会想CSS也会达到同样的效果,但是smarty的配置文件并不会取代CSS,因为可以在配置文件中设置一些CSS不支持的方面,例如页面标题等。
{config_load file="foo.conf"} {*加载配置文件*}
<html>
<head>
<title>{#pageTitle#}</title>
</head>
<body bgcolor="{#bodyBgColor#}">
<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
<tr bgcolor="{#rowBgColor#}">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
3. 在模版中使用保留变量
在smarty模版中可以直接访问的变量就是保留变量,即模版中的默认变量,就是已经定义好的一些变量。例如:
<?php
//开启会话并在session保存两个变量
$_SESSION["username"]="admin";
$_SESSION["uid"]=1;
//显示index.tpl模版
$smarty->display('index.tpl');
模版文件index.tpl的源代码如下
你好:{$smarty.session.username},<a href="user.php?uid={$smarty.session.uid}">个人中心</a>
输出结果:
你好:admin,个人中心
{$smarty}变量是Smarty引擎自动声明好的,在引擎内部自动分配的格式类似于下面的方式。
<?php
$smarty->assign("smarty",array(
"get"=>$_GET,
"post"=>$_POST,
"request"=>$_REQUEST,
"session"=>$_SESSION,
"cookies"=>$_COOKIE,
"server"=>$_SERVER,
"env"=>$_ENV,
"now"=>time(),
"config"=>...,
"const"=>...,
...
));