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&quot",
   "address1" => "XXXXXXXXXXX",
   "address2" => "XXXXXXXXXXX",
   "city" => "bHAVNAGAR",
   "pin" => "364001",
   "phone" => "+919898456445"
 );
 rtemplate($contents, $vars);
 echo $contents;
?>

这个示例实现了简单的功能。如果你的公司值包含 #CITY#,例如,可能会遇到一些大问题。相比之下,使用 Smarty 有更多的优势。不过,无论如何,原生 PHP 模板化方法是最有效且最快的。

它是如何工作的?

Smarty 是一个模板引擎,它实际上将模板文件编译成可以稍后执行的 PHP 文件。这可以节省解析和变量输出的时间,凭借更小的内存使用和更少的正则表达式,Smarty 比其他模板引擎更加高效。

安装

Smarty 的安装非常基础,且易于使用:

  1. smarty.net 下载 Smarty 源码。
  2. 使用支持 .tar.gz 文件的解压工具打开下载的文件。
  3. 进入名为 Smarty-x.x.x 的目录。
  4. libs 文件夹复制到网站根目录(即你希望网站存在的地方,例如 /My_Site/)。
  5. 完成!

没有必要复制其他文件,因为它们只是简单的示例文件。

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