PHP编程
完成条件
Smarty 模板系统
Smarty 模板系统/函数
什么是 Smarty?
Smarty 是一个 PHP 模板引擎。它通过将 PHP 代码与 HTML(或其他任何内容)展示分离,从而实现逻辑和展示的分离[1]。
旧的/自定义模板引擎示例
这就像下面的代码示例:(下面的代码是一个自定义模板引擎的示范——不是 Smarty)
这里有两个文件:“mail.html”(我们可以称其为模板文件)和“mail_engine.php”(没错,这就是引擎)。
mail.html
<html>
<body>
<h1>我的公司名称是 #COMPANY#</h1>
<p>
请注意我们的地址 #ADDRESS1#, #ADDRESS2#, #CITY#-#PIN#。
联系电话 #PHONE#。
</p>
<p>
希望你喜欢我的邮件。
</p>
<p>
谢谢!
</p>
<address> Jaydeep Dave, +919898456445, jaydipdave@yahoo.com </address>
</body>
</html>
mail_engine.php
<?php
$contents = file_get_contents("mail.html");
function rtemplate(&$tdata, $vars)
{
$nv = array();
foreach ($vars as $key => $value)
{
$kk = "#".strtoupper($key)."#";
$nv[$kk] = $value;
}
unset($vars);
$tdata = strtr($nv, $tdata);
return true;
}
$vars = array(
"company" => "Premier Business Softwares"",
"address1" => "XXXXXXXXXXX",
"address2" => "XXXXXXXXXXX",
"city" => "bHAVNAGAR",
"pin" => "364001",
"phone" => "+919898456445"
);
rtemplate($contents, $vars);
echo $contents;
?>
这个示例实现了简单的功能。如果你的公司值包含 #CITY#,例如,可能会遇到一些大问题。相比之下,使用 Smarty 有更多的优势。不过,无论如何,原生 PHP 模板化方法是最有效且最快的。
它是如何工作的?
Smarty 是一个模板引擎,它实际上将模板文件编译成可以稍后执行的 PHP 文件。这可以节省解析和变量输出的时间,凭借更小的内存使用和更少的正则表达式,Smarty 比其他模板引擎更加高效。
安装
Smarty 的安装非常基础,且易于使用:
- 从 smarty.net 下载 Smarty 源码。
- 使用支持
.tar.gz
文件的解压工具打开下载的文件。 - 进入名为
Smarty-x.x.x
的目录。 - 将
libs
文件夹复制到网站根目录(即你希望网站存在的地方,例如/My_Site/
)。 - 完成!
没有必要复制其他文件,因为它们只是简单的示例文件。
Smarty 模板系统用法
简单示例
<?php
$abc = 'hello ';
$smarty->assign("abc", $abc);
?>
模板文件:
{$abc}
基础语法
示例模板代码:
{* 示例 Smarty 模板 *}
{* 包含一个头部文件 *}
{include file="header.tpl"}
{* 从 PHP 脚本定义的变量 $header_file 包含文件 *}
{include file=$header_file}
{include file="middle.tpl"}
{* 简单替代 PHP 中的 echo $title; *}
{$title}
{* 从配置文件定义的变量 #footer# 包含文件 *}
{include file=#footer#}
{* 显示下拉列表 *}
<select name="company">
{html_options values=$vals selected=$selected output=$output}
</select>
基础语法 #2
注释:
{* 注释内容 *}
显示 PHP 脚本中分配的变量:
{$variable}
显示配置文件中定义的变量:
#variable#
在函数中使用变量:
{$variable}
其他示例:
{$foo} <!-- 显示简单变量 -->
{$foo[4]} <!-- 显示数组中索引为 4 的值 -->
{$foo.bar} <!-- 显示数组键名为 "bar" 的值 -->
{$foo->bar} <!-- 显示对象属性 "bar" -->
{$foo->bar()} <!-- 显示对象方法 "bar()" 的返回值 -->
将 Smarty 集成到网站中
以下是一个简单的示例,展示如何通过 PHP 脚本控制 Smarty 引擎并编译模板文件:
<?php
// 引入 Smarty 库
require_once("libs/Smarty.inc.php");
// 创建 Smarty 实例
$smarty = new Smarty();
// 设置模板目录
$smarty->template_dir = "templates";
// 设置变量
$smarty->assign("Title", "Just a test");
// 创建一个数组
$contacts = array(
array("Name" => "John Parkinson", "email" => "john.parkinson.test@domain.tld", "age" => 26),
array("Name" => "Super Mario", "email" => "super.mario@domain.tld", "age" => 54),
array("Name" => "Pete Peterson", "email" => "pete.peterson@domain.tld", "age" => 18),
array("Name" => "Smarty Creator", "email" => "smarty.creator@domain.tld", "age" => 37)
);
// 分配数组
$smarty->assign("contacts", $contacts);
// 显示模板文件
$smarty->display("index.tpl");
?>
变量
Smarty 中变量可以是简单变量、数组或对象,使用类似 PHP 的语法。
循环
在 Smarty 中,循环的写法与 PHP 类似,但使用不同的语法。例如:
PHP:
foreach ($array as $key => $value) {
echo "$key => $value\n";
}
Smarty:
{foreach from=$array key="key" item="value"}
{$key} => {$value}
{/foreach}
条件语句
Smarty 中的 {if}
语句与 PHP 的 if
语句非常相似,并支持 {else}
和 {elseif}
。以下是常用条件运算符:
条件符 | 语法示例 | 含义 | PHP 等价符 |
---|---|---|---|
== |
$a eq $b |
等于 | == |
!= |
$a neq $b |
不等于 | != |
> |
$a gt $b |
大于 | > |
< |
$a lt $b |
小于 | < |
>= |
$a ge $b |
大于或等于 | >= |
<= |
$a le $b |
小于或等于 | <= |
参考资料
最后修改: 2025年01月10日 星期五 01:59