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 18 PHP
关于svn冲突的解决方法
Jun 21 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
destoon出现验证码不显示时的紧急处理方法
Aug 22 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
Nov 22 PHP
ecshop后台编辑器替换成ueditor编辑器
Mar 03 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
基于PHP实现等比压缩图片大小
Mar 04 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 PHP
对laravel in 查询的使用方法详解
Oct 09 PHP
PHP开发API接口签名生成及验证操作示例
May 27 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP扩展开发入门教程
2015/02/26 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
再论Javascript的类继承
2011/03/05 Javascript
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
基于jquery的has()方法以及与find()方法以及filter()方法的区别详解
2013/04/26 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
jQuery基础知识小结
2014/12/22 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
详解JavaScript的回调函数
2015/11/20 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
JavaScript之WebSocket技术详解
2016/11/18 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
Vue结合SignalR实现前后端实时消息同步
2017/09/19 Javascript
详解vue项目中如何引入全局sass/less变量、function、mixin
2018/06/02 Javascript
pyqt4教程之实现windows窗口小示例分享
2014/03/07 Python
Python Trie树实现字典排序
2014/03/28 Python
python开启多个子进程并行运行的方法
2015/04/18 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
python实现在线翻译功能
2020/03/03 Python
python 6行代码制作月历生成器
2020/09/18 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
个人求职简历中英文自我评价
2013/12/16 职场文书
上课玩手机检讨书
2014/02/08 职场文书
广告公司文案策划岗位职责
2015/04/14 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL
MySQL 四种连接和多表查询详解
2021/07/16 MySQL