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
本章是对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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28