Smarty模板语法详解


Posted in PHP onJuly 20, 2019

本文实例讲述了Smarty模板语法。分享给大家供大家参考,具体如下:

所有模版标签用分隔符包围,默认为“{”和“}”。

模板注释

模板注释被星号包围,两边星号被定界符“{ }”包围,如 { smarty * }

smarty注释不会在模板文件的最后输出中出现,这与不同(译注:html注释在页面源码中可见,而smarty注释则不能)。

如下简单代码片{smarty}在源码中不可见,而源码可见。

<html>
<head>
<tltle>smarty</tltle>
<body>
{*smarty*}
smarty
<!--smarty-->
</body>
</head>
</html>

变量初步

模板变量用美元符号开始,可以包含数字、字母和下划线,这php很像。(注意:配置文件变量是一个不用美元符号开始,可以包含数字、字母和下划线,这php很像。(注意:配置文件变量是一个不用美元符号,而是用#号包围着变量(#hashmarks#),或者是一个$smarty.config形式的变量。)

这里config不做说明,下面是变量示例:

{$a+$b}      //最简单的变量处理方法
{$a={$b}+1}   //标签嵌套标签
{$array[$a]}  //变量做数组索引
{$assign var=fun value=$a+$b}  //变量赋值
{$fun="{a}"}  //引号套用标签
{$assign var=fun value=[1,2,3]}
{$assign var=fun value=[1,2,[3,4]]}
{$assign var=fun value=[1=>'one',2=>'tow']}    //数组定义
{$fun=stlen($a)}
{fun=function($a,$b)}     //用作函数参数
{$array.a=1}
{$array.a.b.c($array[a][b][c])=1}  //数组索引赋值
{$object->method1($x)->method2($y)}   //对象链

双引号中插入变量

1、Smarty可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下划线和中括号[]。
2、对于句号,数组和对象引用等的符号此变量必须用两个反引号`。
3、Smarty3增加了双引号对Smarty标签的支持。在需要包含调节器变量、插件、php函数返回值的情形中非常实用。

{function var="test $foo test"}       // 识别 $foo
{func var="test $foo_bar test"}       // 识别 $foo_bar
{func var="test `$foo[0]` test"}     // 识别 $foo[0]
{func var="test `$foo[bar]` test"}   // 识别 $foo[bar]
{func var="test $foo.bar test"}       // 识别  $foo (无法识别 $foo.bar)
{func var="test `$foo.bar` test"}    // 识别 $foo.bar
{func var="test `$foo.bar` test"|escape} //调节器在引号外
{func var="test {$foo|escape} test"}   // 调节器在引号内
{func var="test {time()} test"}        // PHP 函数识别
{func var="test {counter} test"}      //标签识别

函数

每一个smarty标签输出一个变量或者调用某种函数。在定界符内函数(一般定界符‘{}'包住)和其属性(同样在定界符内)将被处理和输出。例如: {function(函数名) attr1(变量名)=”val”(变量值) attr2=”val”}.

{config_load file="colors.conf"}
{include file="header.tpl"}
{if $highlight_name}
  Welcome, <font color="{#fontColor#}">{$name}!</font>
{else}
  Welcome, {$name}!
{/if}
{include file="footer.tpl"}

1、在模板里无论是内置函数还是自定义函数都有相同的语法。
2、内置函数将在smarty内部工作,例如{if}、{section}和{strip},不能修改他们。
3、自定义函数通过插件机制起作用,它们是附加函数。只要你喜欢,可以随意修改,你也可以自行添加。例如{html_options}和{html_select_date}。

属性

大多数函数都带有自己的属性以便于明确说明或者修改他们的行为,smarty函数的属性很像HTML中的属性。静态数值不需要加引号,但是字符串建议使用引号。可以使用普通smarty变量,也可以使用带调节器的变量作为属性值,它们也不用加引号。你甚至可以使用php函数返回值和复杂表达式作为属性值。

Math

数学运算可以直接作用到变量值。

{$foo+1}
{$foo*$bar}
{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
{assign var="foo" value="`$foo+$bar`"}

忽略smarty语法

忽略Smarty对某些语句段的解析很有必要。一种典型的情况是嵌入到模板中的javascript或Css代码。原因在于这些语言使用与Smarty默认定界符‘{'和‘}'一样的符号。

方法:一个避免出现这种情况的好习惯是把你的javascript/css代码分离出来保存成一个独立文件,再用html方法链接到模版中。这样做也有利于浏览器缓存脚本。如果你想把Smarty变量、方法嵌入到javascript/css,请看下面的运用。

在Smarty模版,如果‘{'和‘}'大括号里包含有空格那么整个{}内容会被忽略,你可以设置Smarty类变量$auto_literal=false来取消这种规则。

<script>
// the following braces are ignored by Smarty 以下大括号的内容会被Smarty忽略
// since they are surrounded by whitespace 因为它们里面有空格
function foobar {
alert('foobar!');
}
// this one will need literal escapement 下面的内容会保持原义输出
{literal}
function bazzy {alert('foobar!');}
{/literal}
</script>

{literal}…{/literal}块被用来忽略模版语法的解析,你也可以用{idelim},{rdelim}标签或{smarty.Idelim}{smarty.Idelim}{smarty.rdelim}变量来忽略个别大括号(译注:后面两种方法主要用来在模版中输出左右大括号)。

希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP数组实例总结与说明
Aug 23 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
php页码形式分页函数支持静态化地址及ajax分页
Mar 28 PHP
kohana框架上传文件验证规则写法示例
Jul 14 PHP
ThinkPHP应用模式扩展详解
Jul 16 PHP
php数组键值用法实例分析
Feb 27 PHP
PHP实现远程下载文件到本地
May 17 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
php对接java现实加签验签的实例
Nov 25 PHP
laravel 5.4中实现无限级分类的方法示例
Jul 27 PHP
浅析PHP数据导出知识点
Feb 17 PHP
Smarty模板变量与调节器实例详解
Jul 20 #PHP
Smarty模板配置实例简析
Jul 20 #PHP
详解PHP 7.4 中数组延展操作符语法知识点
Jul 19 #PHP
php的优点总结 php有哪些优点
Jul 19 #PHP
Yii框架页面渲染操作实例详解
Jul 19 #PHP
Yii2 queue的队列使用详解
Jul 19 #PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 #PHP
You might like
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
js自定义回调函数
2015/12/13 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
详解js的作用域、预解析机制
2018/02/05 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
vue iview多张图片大图预览、缩放翻转
2019/07/13 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
2020/05/19 jQuery
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
2016/08/30 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
简单了解什么是神经网络
2017/12/23 Python
Python实现的简单读写csv文件操作示例
2018/07/12 Python
在Python中实现替换字符串中的子串的示例
2018/10/31 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Python模块的加载讲解
2019/01/15 Python
Python创建数字列表的示例
2019/11/28 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
大学生大二自我鉴定
2013/10/28 职场文书
大学生创业计划书的范文
2014/01/07 职场文书
校本教研工作方案
2014/01/14 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
部门2014年度工作总结
2014/11/12 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
导游词之南京栖霞山
2019/10/18 职场文书
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS