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 | 等于 | == |
!= | 不等于,不相等 | $a 不等于 $b | 不等于 | != |
> | 大于 | $a 大于 $b | 大于 | > |
< | 小于 | $a 小于 $b | 小于 | < |
>= | 大于等于 | $a 大于等于 $b | 大于或等于 | >= |
<= | 小于等于 | $a 小于等于 $b | 小于或等于 | <= |
=== | $a === 0 | 检查恒等性 | === | |
! | 非 | 非 $a | 否定(一元) | ! |
% | 取模 | $a 取模 $b | 模运算 | % |
是否 [不] 能被整除 | $a 不能被 4 整除 | 能被整除 | $a % $b == 0 | |
是否 [不] 是偶数 | $a 不是偶数 | [不] 是偶数(一元) | $a % 2 == 0 | |
是否 [不] 能被 $b 整除后是偶数 | $a 不能被 $b 整除后是偶数 | 分组级别是否 [不] 是偶数 | ($a / $b) % 2 == 0 | |
是否 [不] 是奇数 | $a 不是奇数 | [不] 是奇数(一元) | $a % 2 != 0 | |
是否 [不] 能被 $b 整除后是奇数 | $a 不能被 $b 整除后是奇数 | [不] 是奇数分组 | ($a / $b) % 2 != 0 |