PHP模板引擎Smarty内建函数详解
本文实例讲述了PHP模板引擎Smarty内建函数。分享给大家供大家参考,具体如下:
Smarty的内建函数:Smarty自带一些内建函数,内建函数是模板语言的一部分,用户不能创建名称和内建函数一样的自定义函数,也不能修改内建函数。
下面对Smarty中的内建函数进行说明,并加以实例:
实例中使用到的Smarty模板引擎初始化文件init.inc.php和主文件index.php
init.inc.php
<?php define('ROOT_PATH',dirname(__FILE__));//设置网站根目录 requireROOT_PATH.'/libs/Smarty.class.php';//加载Smarty模板引擎 $_tpl=newSmarty();//创建一个实例对象 $_tpl->template_dir=ROOT_PATH.'/tpl/';//重新指定模板目录 $_tpl->compile_dir=ROOT_PATH.'./com/';//重新指定编译目录 $_tpl->left_delimiter='<{';//重新指定左定界符 $_tpl->right_delimiter='}>';//重新指定右定界符 ?>
index.php
<?php require'init.inc.php';//引入模板初始化文件 global$_tpl; $_tpl->display('index.tpl');//引入模板 ?>
1、capture
/tpl/index.tpl
<html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> <title>Capture</title> </head> <body> <!--定义capture--> <{capturename="foo"}> 这里是capture函数里面的内容,默认是不显示的。 <{/capture}> <!--调用capture,使用的是Smarty中的保留变量{$smarty.capture}--> <{$smarty.capture.foo}> </body> </html>
2、config_load
config_load函数用于从配置文件中加载变量,关于config_load函数的使用,可参考前面一篇《PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例》。
3、include
include函数用于在当前模板中包含其它模板,当前模板中的变量在被包含的模板中可用.必须指定file属性,该属性指明模板资源的位置。如果设置了assign属性,该属性对应的变量名用于保存待包含模板的输出,这样待包含模板的输出就不会直接显示了。请看下面的示例:
/tpl/index.tpl
{includefile="header.tpl"} {*bodyoftemplategoeshere*} {includefile="footer.tpl"}
4、if,elseif,else
Smarty中的if语句和php中的if语句一样灵活易用,并增加了几个特性以适宜模板引擎.if必须于/if成对出现.可以使用else和elseif子句。
可以使用以下条件修饰词:eq、ne、neq、gt、lt、lte、le、gte、ge、iseven、isodd、isnoteven、isnotodd、not、mod、divby、evenby、oddby、==、!=、>、<、<=、>=.使用这些修饰词时必须和变量或常量用空格格开。
下面对这些修饰符表示的意思进行说明:
eq
==
ne
!=
neq
!=
gt
>
lt
<
lte
<=
le
<=
gte
>=
ge
>=
iseven
是否偶数
isodd
是否奇数
isnoteven
是否不是偶数
isnotodd
是否不是奇数
not
!=
mod
求模
divby
是否能被整除
evenby
商是否是偶数
oddby
商是否是奇数
&&
与
||
或
()
括号改变优先级
5、ldelim和rdelim
用于输出分隔符,也就是大括号"{"和"}".模板引擎总是尝试解释大括号内的内容,因此如果需要输出大括号,请使用此方法。请看下面的示例:
/tpl/index.tpl
<html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> <title>ldelim和rdelim</title> </head> <body> <{ldelim}>funcname<{rdelim}>是Smarty中的一个函数。 <!--执行结果:<{funcname}>是Smarty中的一个函数。--> </body> </html>
6、literal
literal标签区域内的数据将被当作文本处理,此时模板将忽略其内部的所有字符信息.该特性用于显示有可能包含大括号等字符信息的javascript脚本.当这些信息处于{literal}{/literal}标签中时,模板引擎将不分析它们,而直接显示,其实按照我的所有例子中的标签风格(因为在init.inc.php初始化文件中已经重新设置了左定界符和右定界符),而不是Smarty的默认风格,基本上不会产生这种情况。关于该函数的使用,请看下面的示例
/tpl/index.tpl
<html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> <title>literal</title> </head> <body> <{literal}> <scriptlanguage=javascript> <!-- window.alert(newDate()); --> </script> <{/literal}> </body> </html>
7、php
php标签允许在模板中直接嵌入php脚本,此标签会把标签内部的内容当成PHP脚本进行解析执行。请看下面的示例
/tpl/index.tpl
<html> <head> <metahttp-equiv="Content-Type"content="text/html;charset=utf-8"> <title>php</title> </head> <body> <{php}> echodate("Y-m-dH:i:s"); <{/php}> <!--执行结果:2011-10-2404:35:03--> </body> </html>
8、strip
Web开发者多次遇到空格和回车影响HTML输出的情形,为了得到特定的结果,因此你不得不在模板里运行所有的标签.通常在难以理解或难以处理的模板中遇到此问题。Smarty在显示前将除区任何位于{strip}{/strip}标记中数据的首尾空格和回车.这样可以保证模板容易理解且不用担心多余的空格导致问题。
好了,Smarty模板引擎中的内建函数先总结这么多,关于内建函数中两个最重要的函数(foreach,foreachelse、section,sectionelse)的使用,可参考前面一篇《PHP模板引擎Smarty内建函数foreach,foreachelse用法分析》
更多关于PHP相关内容感兴趣的读者可查看本站专题:《smarty模板入门基础教程》、《PHP模板技术总结》、《PHP基于pdo操作数据库技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。