PHP 编程/Smarty 模板系统
Smarty 是一个用于 PHP 的模板引擎。它允许您通过将 PHP 代码与 HTML(或其他任何内容)表示分离来分离逻辑和表示[1]。
它就像下面这样:(以下代码是自定义模板引擎的演示,不是 Smarty)
这里有两个文件“mail.html”(我们可以说这是一个模板文件)和“mail_engine.php”(是的,你说得对...这是一个引擎。)
mail.html
<html>
<body>
<h1>My company name is #COMPANY#</h1>
<p>
Please note our address #ADDRESS1#, #ADDRESS2#, #CITY#-#PIN#.
Contact us on #PHONE#.
</p>
<p>
Hope you like my mail.
</p>
<p>
Thanking You,
</p>
<address> Jaydeep Dave, +919898456445, [email protected] </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.net 下载 Smarty 源代码
- 使用您的存档提取器打开它(必须与 .tar.gz 文件兼容)
- 转到名为 Smarty-x.x.x 的目录
- 将libs文件夹复制到您网站的根目录(您希望网站存在的目录,例如 /My_Site/)
- 您完成了!
不需要复制其他文件,因为它们只是简单的示例。
<?php
$abc = 'hello ';
$smarty->abc("abc",$abc);
?>
{$abc}
{* Sample Smarty Template *}
{* Include a header file *}
{* Include a file from a variable $header_file, which is defined by the php script *}
{include file=$header_file}
{include file="middle.tpl"}
{* Simple alternative to PHP's echo $title;
{$title}
{* Include a file from a variable #footer#, which is defined by the config file *}
{include file=#footer#}
{* display dropdown lists *}
<select name="company">
{html_options values=$vals selected=$selected output=$output}
</select>
{*end*}
注释
{* Comment *}
编写一个变量,从 PHP 脚本分配
{$variable}
编写一个变量,从配置文件分配
#variable#
在函数中使用变量
$variable
其他示例(Smarty 文档)
{$foo} <!-- displaying a simple variable (non array/object) -->
{$foo[4]} <!-- display the 5th element of a zero-indexed array -->
{$foo.bar} <!-- display the "bar" key value of an array, similar to PHP $foo['bar'] -->
{$foo.$bar} <!-- display variable key value of an array, similar to PHP $foo[$bar] -->
{$foo->bar} <!-- display the object property "bar" -->
{$foo->bar()} <!-- display the return value of object method "bar" -->
{#foo#} <!-- display the config file variable "foo" -->
{$smarty.config.foo} <!-- synonym for {#foo#} -->
{$foo[bar]} <!-- syntax only valid in a section loop, see {section} -->
允许使用许多其他组合
{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz,2,$bar)} <!-- passing parameters -->
{"foo"} <!-- static values are allowed -->
调用函数
{function}
为了使用 Smarty 模板引擎,您需要更改您的 php 脚本,该脚本用于控制 Smarty 引擎并编译模板文件。简单示例
<?php
// Include Smarty Library
require_once("libs/Smarty.inc.php");
// Create new variable $smarty from the class Smarty
$smarty=new Smarty();
// Set the template directory, very useful for different templates
$smarty->template_dir="templates";
// From here you should put your own code
// Set some variables
$smarty->assign("Title"=>"Just a test");
// Create an array, which we will assign later
$contacts=array(
array("Name"=>"John Parkinson","email"=>"[email protected]","age"=>26),
array("Name"=>"Super Mario","email"=>"[email protected]","age"=>54),
array("Name"=>"Pete Peterson","email"=>"[email protected]","age"=>18),
array("Name"=>"Smarty Creator","email"=>"[email protected]","age"=>37)
);
// Assign the array
$smarty->assign("contacts",$contacts);
// Compile and Display output of the template file '''templates/index.tpl'''
// Up to here you should put your own code
$smarty->display("index.tpl");
?>
请参阅 #变量
Smarty 中的循环就像 PHP 一样,只是处理变量的方式不同。例如,在 PHP 中你会这样写
foreach($array as $key => $value) {
echo "$key => $value\n";
}
Smarty 通过以下类似的代码片段来编译
{foreach from=$array key="key" item="value"}
{$key} => {$value}
{/foreach}
此外,您可以使用section函数,它与foreach非常类似
如果设计人员想要添加项目符号或数组项的索引,程序员则无需执行任何操作,因为您可以使用其他变量,这些变量将在每次循环后自行更改。
Smarty 中的 {if} 语句与 PHP if 语句具有几乎相同的灵活性,并且为模板引擎添加了一些额外的功能。每个 {if} 必须与 {/if} 配对。{else} 和 {elseif} 也允许。所有 PHP 条件语句都被识别,例如 ||、or、&&、and 等。
以下是公认限定符的列表,它们必须用空格与周围的元素隔开。请注意,方括号中列出的项目是可选的。PHP 等效项在适用时显示。
限定符 | 替代 | 语法示例 | 含义 | PHP 等效项 |
---|---|---|---|---|
== | eq | $a eq $b | 等于 | == |
!= | ne, neq | $a neq $b | 不等于 | != |
> | gt | $a gt $b | 大于 | > |
< | lt | $a lt $b | 小于 | < |
>= | gte, ge | $a ge $b | 大于或等于 | >= |
<= | lte, le | $a le $b | 小于或等于 | <= |
=== | $a === 0 | 检查同一性 | === | |
! | not | not $a | 否定(一元) | ! |
% | mod | $a mod $b | 模运算 | % |
是否 [不] 能被整除 | $a 不能被 4 整除 | 可被整除 | $a % $b == 0 | |
是否 [不] 为偶数 | $a 不是偶数 | [不] 为偶数 (一元) | $a % 2 == 0 | |
是否 [不] 能被整除为偶数 | $a 不能被 $b 整除为偶数 | 分组级别是否 [不] 为偶数 | ($a / $b) % 2 == 0 | |
是否 [不] 为奇数 | $a 不是奇数 | [不] 为奇数 (一元) | $a % 2 != 0 | |
是否 [不] 能被整除为奇数 | $a 不能被 $b 整除为奇数 | [不] 为奇数分组 | ($a / $b) % 2 != 0 |