+ -
当前位置:首页 → 问答吧 → Smarty模板引擎全教程

Smarty模板引擎全教程

时间:2009-12-16

来源:互联网

前面已经介绍了在SpeedPHP框架中使用Smarty模板引擎的方法,下面我们来更详细地介绍Smarty的使用方法。

本章是对Smarty常用的一些功能进行了详述,让您在最短的时间内掌握Smarty模板的日常开发。如果您需要更深入的了解Smarty这个优秀的PHP模板引擎技术,请参考Smarty中文手册。

一、对模板赋值
将变量输入到模板

程序:

$this->hello = "Hello world";

模板:

<{$hello}>

输出:

Hello world


将数组输入到模板

程序:

$this->color = array('red' => '红色', 'yellow' => '黄色', 'green' => '绿色');

模板可以使用:

<{$color['red']}>

同时也可以:

<{$color.red>

输出:

红色


二、模板内部语法
if,elseif,else 条件判断

<{if $color == "red"}>

这是红色的。

<{elseif $color == "green" || $color == "white"}>

这是绿色或者白色的。

<{else}>

这不知道什么颜色

<{/if}>


Smarty中的if/else除了不使用括号外和PHP的if/else几乎是一样的。

include 包含文件

<{include file="header.html"}>


请注意include的包含是以'template_dir'的设置为根目录的,而且并不存在相对目录。所以比如我们的footer.html在"模板目录/main/footer.html",我们将使用

<{include file="main/footer.html"}>


来进行包含。

在Smarty中还有include_php,和include一样,只是include_php包含的是可执行的PHP文件。同时,如果使用include_php函数,将可能涉及到Smarty的安全特性,这和{php}语法也是有关的。详细请参考Smarty中文手册。
当然,在基于Smarty的模板开发中,我们原则上不建议在模板内使用PHP的功能。
foreach,foreachelse

和PHP的foreach一样,循环处理数组。

例:$this->color = array('red' => '红色', 'yellow' => '黄色', 'green' => '绿色');

<{foreach item=colorname from=$color key=enname}>

<{$enname}>: <{$colornam}><br>

<{/foreach}>


将输出:

red:红色

yellow:黄色

green:绿色

多维数组也是同样处理,请留意以下的多维数组:

例:

$students =

   array(

      'name' => 'He Qing',

      'age' => 17,

      'score' => array(

         'math' => 76,

        'english' => 92,

         'PE' => 72

      ),

   ),

   array(

      'name' => 'Lee Wen',

      'age' => 18,

      'score' => array(

         'math' => 69,

        'english' => 80,

         'PE' => 79

      ),

   ),

);

$this->students = $students ;


模板:

学生成绩:<br>

<{foreach item=person from=$students }>

姓名:<{$person.name}><br>

年龄:<{$person.age}><br>

分数:

<{foreach item=num key=subject from=$person.score }>

<{$subject}>:<{$num}><br>

<{/foreach}>

<br><br>

<{foreachelse}>

暂无学生数据!

<{/foreach}>


foreachelse是在变量未赋值的时候将显示。

和foreach差不多的还有section,详细请参考Smarty中文手册。

literal

literal主要用于显示有可能包含大括号等字符信息的 javascript 脚本. 当这些javascript 脚本处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示。

有时候我们在使用Smarty模板时,会遇到程序正常却仅输出空白页面;这时我们可以检查一下,是否该模板中包含了javascript脚本。在这些javascript外边加上literal就不会有问题了。

<{literal}>

<script language=javascript>

  <!–

  function isblank(field) {

  if (field.value == '')

  { return false; }

  else

  {

  document.loginform.submit();

  return true;

  }

  }

  // –>

</script>

<{/literal}>


literal和下面介绍的strip虽然在一般的Smarty教程中很少有介绍,但的确literal和strip对日常的开发是非常有帮助的,尤其是strip。

strip

Smarty将清除{strip} … {/strip}之间的全部空格以及回车。

建议马上在您的模板中使用strip标签,根据实际开发的估计,一般的页面在使用了strip标签几乎可以减少四分之一的html文件大小,尤其在内容特别多的页面(比如首页)在网页的打开速度和显示速度上面有着明显的提高。

例子:

{strip}

<table border=0>

<tr>

<td>

<A HREF="{$url}">

<font color="red">This is a test</font>

</A>

</td>

</tr>

</table>

{/strip}


显示:

<table border=0><tr><td><A HREF="http://my.domain.com"><font color="red">This is a test</font></A></td></tr></table>


三、SpeedPHP框架在Smarty模板中的函数
在模板中,除了可以使用Smarty本身自带的函数外,sp框架还提供了一些常用的函数,下面我们里了解一下:

spUrl

和输出spUrl()函数结果一样,显示一个URL地址

比如:

程序中:echo spUrl('article', 'list', array('page'=>3, 'pageSize' => 10)); // 显示文章列表的第三页

在模板中使用就是:

<{spUrl c='article' a='list' page=3 pageSize=10}>


T

和输出 T()函数的结果一样,显示多语言情况下的翻译结果

比如:

程序中:echo T("welcome"); // 显示在特定语言下的欢迎信息

在模板中则是:

<{T w='welcome'}>


四、HTML相关函数
Smarty提供了一系列的HTML代码生成函数。以下例子均出自Smarty手册,详细说明请参考Smarty中文手册。

html_checkboxes 生成多个多选框

程序:

$this->cust_checkboxes = array(

1000 => 'Joe Schmoe',

1001




本文地址:http://speedphp.com/post/smarty-advanced.html


作者: jake   发布时间: 2009-12-16