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跨时区(UTC时间)应用解决方案
Jan 11 PHP
两种设置php载入页面时编码的方法
Jul 29 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
PHP封装的字符串加密解密函数
Dec 18 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
利用php_imagick实现复古效果的方法
Oct 18 PHP
php使用Jpgraph创建折线图效果示例
Feb 15 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
php实现统计二进制中1的个数算法示例
Jan 23 PHP
PHP笛卡尔积实现算法示例
Jul 30 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
PHP常用数组函数介绍
2014/07/28 PHP
PHP上传文件参考配置大文件上传
2015/12/16 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
会自动逐行上升的文本框
2006/06/30 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
浅谈javascript的数据类型检测
2010/07/10 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
2014/01/28 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
JavaScript匿名函数与委托使用示例
2014/07/22 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
Node.js实现数据推送
2016/04/14 Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
2016/12/20 Javascript
element-ui 限制日期选择的方法(datepicker)
2018/05/16 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
[52:44]VGJ.T vs infamous Supermajor小组赛D组败者组第一轮 BO3 第一场 6.3
2018/06/04 DOTA
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
python re.match()用法相关示例
2021/01/27 Python
JD Sports瑞典:英国领先的运动时尚商店
2018/01/28 全球购物
仓库班组长岗位职责
2013/12/12 职场文书
园林技术个人的自我评价
2014/01/08 职场文书
优秀教师感人事迹材料
2014/05/04 职场文书
中秋晚会活动方案
2014/08/31 职场文书
婚庆答谢词
2015/01/04 职场文书
无罪辩护词范文
2015/05/21 职场文书
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis
Python+Tkinter制作专属图形化界面
2022/04/01 Python