变量修饰器可以用于变量, 自定义函数或者字符串。 使用修饰器,需要在变量的后面加上|(竖线)并且跟着修饰器名称。 修饰器可能还会有附加的参数以便达到效果。 参数会跟着修饰器名称,用:(冒号)分开。 同时,默认全部PHP函数都可以作为修饰器来使用 (不止下面的),而且修饰器可以被 联合使用

这是Smarty3的默认行为。在Smarty2.x,你需要在数组后加上"@" 标识来使用修饰器,如{$articleTitle|@count}。 在Smarty3,不再需要使用"@",它会被忽略

另外,在Smarty2.x,修饰器可以作用在数学表达式的结果上,如{8+2}, 意味着{8+2|count_characters}的结果是2, 因为8+2=10 而 10 是两个字符长度。 在Smarty3,修饰器将会作用在变量上,或者是在表达式计算前,所以因为 2 是一个字符长度, 所以{8+2|count_characters}的结果是9. 如果希望出现原来的结果,可以使用括号,如{(8+2)|count_characters}

修饰器可以从$plugins_dir 目录中自动加载,或者通过registerPlugin() 来进行动态注册。 第二种方法在PHP代码和smarty模板间共享函数时很有用。

默认全部PHP函数都可以作为修饰器,正如上面例子演示的。 然而,使用php函数作为修饰器会存在两个小问题:

  • 首先 - 有时函数参数的顺序并不太一致。如使用 {"%2.f"|sprintf:$foo}来格式化$foo是正确的。 但是更直观的做法,{$foo|string_format:"%2.f"}是Smarty自身的函数。

  • 其次 - 如果开启了安全限制,那么要使用php函数作为修饰器,就必须通过

{* apply modifier to a variable *}
{$title|upper} {* modifier with parameters *}
{$title|truncate:40:"..."} {* apply modifier to a function parameter *}
{html_table loop=$myvar|upper} {* with parameters *}
{html_table loop=$myvar|truncate:40:"..."} {* apply modifier to literal string *}
{"foobar"|upper} {* using date_format to format the current date *}
{$smarty.now|date_format:"%Y/%m/%d"} {* apply modifier to a custom function *}
{mailto|upper address="smarty@example.com"} {* using php's str_repeat *}
{"="|str_repeat:80} {* php's count *}
{$myArray|@count} {* this will uppercase and truncate the whole array *}
<select name="name_id">
{html_options output=$my_array|upper|truncate:20}
</select>

Smarty3——变量修饰器的更多相关文章

  1. Smarty3——复合变量修饰器输

    你可以联合使用多个修饰器. 它们会按复合的顺序来作用于变量,从左到右. 它们必须以| (竖线)进行分隔,以‘:’号设置参数 {$articleTitle} {$articleTitle|upper|s ...

  2. Smarty 变量修饰器

    为了更方便的实现 功能与显示分离,通常会用 smarty 将功能代码中的数据 assign 到页面中,在页面中合理使用 smarty 的修饰方法,会使页面显示更美观! 一个数据可同时使用多个修饰函数, ...

  3. Python修饰器的函数式编程

    Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都 ...

  4. Python修饰器

    Python的修饰器的英文名叫Decorator,当你看到这个英文名的时候,你可能会把其跟Design Pattern里的Decorator搞混了,其实这是完全不同的两个东西.虽然好像,他们要干的事都 ...

  5. Python_@修饰器(装饰器)的理解

    装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能. 装饰器的作用就是为已经存在的对象添加额外的功能. def funA(fun): print (fun( ...

  6. GLSL ES 中的存储变量修饰符(const/attribute/uniform/varying/in/centroid in/out/centroid out)

    GLSL ES 3.00 中支持的存储变量修饰符 变量名称 作用 示例 const 编译过程常量,或者函数的只读参数 const vec3 zAxis = vec3 (0.0, 0.0, 1.0); ...

  7. python函数修饰器(decorator)

    python语言本身具有丰富的功能和表达语法,其中修饰器是一个非常有用的功能.在设计模式中,decorator能够在无需直接使用子类的方式来动态地修正一个函数,类或者类的方法的功能.当你希望在不修改函 ...

  8. Python学习札记(二十六) 函数式编程7 修饰器

    修饰器 NOTE 1.函数对象有一个__name__属性,可以拿到函数的名字: #!/usr/bin/env python3 def now(): print('2017/2/19') def mai ...

  9. python__高级 : @修饰器(装饰器)的理解

    以下是第一次了解的时候写的东西,有的地方理解不正确,虽已改正但是太片面,请直接看下面第二次修改加上的内容. ---------------------------------------------- ...

随机推荐

  1. 序列化 SqlAlchemy 的结果为 json 字符串

    http://my.oschina.net/gongshang/blog/395431?p=1 在设计 RESTful 的网站时,我们总是希望 ORM 框架返回的结果是可以直接给 View 层使用的 ...

  2. Linux 之 NTP 服务 服务器

    我们选择第三台机器( mysql02 )为 NTF 服务器,其他机器和这台机器进行同步. 1. 检查 ntp 服务是否已经安装[root@mysql02 ~]# sudo rpm -qa | grep ...

  3. mysql的账号管理

    mysql的账号管理 最先匹配 user 表(包含:用户列 权限列 安全列 资源控制列)连接判断:host  user password字段(user的授权是全局的): 然后匹配db表:如果只是给指定 ...

  4. python一个简单的web服务器和客户端

    服务器:      当客户联系时创建一个连接套接字      从这个连接接收HTTP请求(*)      解释该请求所请求的特定文件      从服务器的文件系统获取该文件      并发送文件内容 ...

  5. redis1

    1. redis持久化有两种方式 ① RDB:就是周期性(比如5s)将内存中的数据放到硬盘 ② AOF:就是增删改操作写入日志,根据日志恢复等 2. redis三种分布式 ①主从 ②哨兵 ③集群 3. ...

  6. svn配置及基本使用

    svn软件下载地址http://subversion.apache.org/packages.html在安装TortoiseSVN时安装客户端和服务端 下以svn在windows下使用为例,linux ...

  7. python学习(十七) 扩展python

    c, c++, java比python快几个数量级. 17.1 考虑哪个更重要 开发速度还是运行速度更重要. 17.2 非常简单的途径:Jython和IronPython Jython可以直接访问JA ...

  8. Oracle 分区表-Range分区

    原文:http://www.tuicool.com/articles/MzeM7r 一.什么是分区表 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分 ...

  9. Py修行路 python基础 (三)字典

    names=["zhang"]names2=["jack","jie"]names.clear()print(names) #清空整个列表 ...

  10. pandas+mysql+excel 数据处理

    mysql  建表 join 建索引,不然查询慢 注意时间类型是否update后会被刷新 设计逻辑删除 enable   ,  不要delete null,字符串   数字运算用函数  ifnull( ...