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 相关文章推荐
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
php GD绘制24小时柱状图
Jun 28 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
php实现的常见排序算法汇总
Sep 08 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
详解PHP中的Traits
Jul 29 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
Feb 08 PHP
php基于PDO实现功能强大的MYSQL封装类实例
Feb 27 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 PHP
PHP二维数组分页2种实现方法解析
Jul 09 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中使用模板的方法
2008/05/24 PHP
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
2012/08/21 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
JQuery对class属性的操作实现按钮开关效果
2013/10/11 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
input框中的name和id的区别
2016/11/16 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
vue组件命名和props命名代码详解
2019/09/01 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
如何通过Proxy实现JSBridge模块化封装
2020/10/22 Javascript
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python中基本的日期时间处理的学习教程
2015/10/16 Python
python requests 使用快速入门
2017/08/31 Python
pytorch 转换矩阵的维数位置方法
2018/12/08 Python
Python实现自动访问网页的例子
2020/02/21 Python
Shein英国:女性时尚网上商店
2019/04/10 全球购物
eBay意大利购物网站:eBay.it
2019/09/04 全球购物
公积金单位接收函
2014/01/11 职场文书
财产公证书
2014/04/10 职场文书
2014年后勤工作总结
2014/11/18 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技