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中的 == 运算符进行字符串比较
Nov 26 PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
php分页示例代码
Mar 19 PHP
PHP has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
php 接口类与抽象类的实际作用
Nov 26 PHP
php读取javascript设置的cookies的代码
Apr 12 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
PHP中strtr字符串替换用法详解
Nov 26 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
yii用户注册表单验证实例
Dec 26 PHP
YII2 实现多语言配置的方法分享
Jan 11 PHP
PHP PDOStatement::rowCount讲解
Feb 01 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支持断点续传的源码
2010/05/16 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
2010/12/12 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
yii2中的rules 自定义验证规则详解
2016/04/19 PHP
Yii统计不同类型邮箱数量的方法
2016/10/18 PHP
thinkPHP5.0框架安装教程
2017/03/25 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PHP基于进程控制函数实现多线程
2020/12/09 PHP
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
原生js实现放大镜效果
2017/01/11 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
vue数据双向绑定的注意点
2017/06/23 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
关于Vue的路由权限管理的示例代码
2018/03/06 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
Python重新引入被覆盖的自带function
2014/07/16 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
Python的高阶函数用法实例分析
2019/04/11 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
Python Numpy 自然数填充数组的实现
2019/11/28 Python
python 爬虫基本使用——统计杭电oj题目正确率并排序
2020/10/26 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
实习销售业务员自我鉴定
2013/09/21 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL