跳转至内容

PHP 编程/Smarty 模板系统

来自维基教科书,开放世界中的开放书籍

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

此示例允许少量功能。如果您的公司价值包含 #CITY#,例如,您可能会遇到很大的问题。使用 Smarty 的好处还有很多。但无论如何,原始 PHP 模板是最有效和最快的。

它是如何工作的?

[编辑 | 编辑源代码]

Smarty 是一个模板引擎,它实际上将模板文件编译成 PHP 文件,该文件可以稍后执行。这简单地节省了解析和变量输出的时间,以更少的内存使用和正则表达式击败其他模板引擎。

安装非常基本且易于使用

  1. smarty.net 下载 Smarty 源代码
  2. 使用您的存档提取器打开它(必须与 .tar.gz 文件兼容)
  3. 转到名为 Smarty-x.x.x 的目录
  4. libs文件夹复制到您网站的根目录(您希望网站存在的目录,例如 /My_Site/)
  5. 您完成了!

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

简单示例

[编辑 | 编辑源代码]
<?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*}

基本语法 #2

[编辑 | 编辑源代码]

注释

{* 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");
?>

#基本语法 #2

请参阅 #变量

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

参考资料

[编辑 | 编辑源代码]
  1. Smarty 网站, 文档, 下载


华夏公益教科书