4. Smarty3:模版中的变量应用


在smarty模版中无非就是”变量”和”函数”两种语法格式。在Smarty模版中又分为三种可用的变量形式。

  1. 从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"=>...,
    ...
));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值