PHP程序员入门笔记之Smarty相关的操作

作者:袖梨 2022-06-25

模板中变量的声明

在Smarty中,一切以变量为主,所有的呈现逻辑都让模板自行控制。Smarty有几种不同类型的变量,变量的类型取决于它的前缀是什么符号(或者被什么符号包围),Smarty的变量可以直接被输出或者作为函数属性和修饰符的参数,或者用于内部的条件表达式等。以下声明几个可以在Smarty模板中直接输出的变量:
 

 代码如下 复制代码
{$Name}                         {* 常规类型的变量,需要调用模板内的assign函数分配值 *} 
{$Contacts[row].Phone}              {* 数组类型变量,也是调用模板内的assign函数分配值 *} 
        {* 从配置文件中读取变量的值并输出 *}

如果在Smarty模板中输出从PHP中分配的变量,需要在前面加上”$”符号并用定界符将它括起来,命名方式和PHP的变量命名方式是一模一样的。并且定界标示符号又有点像是PHP中的(事实上它们的确会被替换成这个)。
Smarty在应用程序逻辑层的使用步骤
Smarty模板引擎的应用和我们前面介绍的自定义模板相似,它需要在PHP的应用程序逻辑和页面模板中配合使用,才能完全分离表现层和逻辑层。在PHP程序中,需要以下五个步骤使用Smarty。
第一步:加载Smarty模板引擎,例如:require(“Smarty.class.php”);。
第二步:建立Smarty对象,例如:$smarty=new Smarty();。
第三步:修改Smarty的默认行为,例如:开启缓存机制、修改模板默认存放目录等。
第四步:将程序中动态获取的变量,通过Smarty对象中的assign()方法置入模板里。
第五步:利用Smarty对象中的display()方法将模板内容输出。
在这五个步骤中,可以将前三个步骤定义在一个公共文件中,像前面介绍过的用来初始化Smarty对象的文件main.inc.php。因为前三步是Smarty在整个PHP程序中应用的核心,不论是常数定义、外部程序加载、共享变量建立等,都是从这里开始的。所以我们通常都是先将前三个步骤做好放入一个公共文件中,之后每个PHP脚本中只要将这个文件包含进来就可以了,因此在程序流程规划期间,必须好好构思这个公用文件中设置的内容。后面的两个步骤是通过访问Smarty对象中的方法完成的,有必要正式地介绍一下assign()和display()两个方法。
1.assign()方法
在PHP脚本中调用该方法可以为Smarty模板文件中的变量赋值。它的使用比较容易,原型如下所示:
 

 代码如下 复制代码
void assign (string varname, mixed var)        
//Smarty对象中的方法,用来赋值到模板中
通过调用Smarty对象中的assign()方法,可以将任何PHP所支持的类型数据赋值给模板中的变量,包含数组和对象类型。使用的方式有两种,可以指定一对”名称/数值”或指定包含”名称/数值”的联合数组。如下所示:
 
//指定一对"名称/数值"的使用方式 
$smarty->assign("name","Fred");              
//将字符串"Fred"赋给模板中的变量{$name} 
$smarty->assign("address",$address);          
//将变量$address的值赋给模板中的变量{$address} 
//指定包含"名称/数值"的联合数组的使用方式 
$smarty->assign(array("city" => "Lincoln","state" => "Nebraska"));
//这种方式很少使用

2.display()方法
基于Smarty的脚本中必须用到这个方法,而且在一个脚本中只能使用一次,因为它负责获取和显示由Smarty引擎引用的模板。该方法的原型如下所示:
 

 代码如下 复制代码
Void display (string template [, string cache_id[, string compile_id]])       //用来获取和显示Smarty模板

第一个参数template是必选的,需要指定一个合法的模板资源的类型和路径。还可以通过第二个可选参数cache_id指定一个缓存标识符的名称,第三个可选参数compile_id在维护一个页面的多个缓存时使用,这两个可选参数将在本章的16.8节中讨论。在下面的示例中使用多种方式指定一个合法的模板资源,如下所示:
 

 代码如下 复制代码
//获取和显示由Smarty对象中的$template_dir属性所指定目录下的模板文件index.tpl  
$smarty->display("index.tpl");          
//获取和显示由Smarty对象中的$template_dir变量所指定的目录下子目录admin中的模板文件index.tpl  
$smarty->display("admin/index.tpl"); 
//绝对路径,用来使用不在$template_dir模板目录下的文件 
$smarty->display("/usr/local/include/templates/header.tpl"); 
//绝对路径的另外一种方式,在WINDOS平台下的绝对路径必须使用"file:"前缀 
$smarty->display("file:C:/www/pub/templates/header.tpl");

在使用Smarty的PHP脚本文件中,除了基于Smarty的内容需要上面五个步骤外,程序的其他逻辑没有改变。例如,文件处理、图像处理数据库连接、MVC的设计模式等,使用形式都没有发生变化。

相关文章

精彩推荐