ColdFusion - Custom Tag 自定义标签
2018-12-14
CustomTag 实际上是一种动态 header,例如可以在 header 中同时使用数据库数据(这个是 bootstrap.header 做不到的) 有以下几种使用方法:
-
在服务器的 CustomTag 文件夹中放置对应的自定义标签 cfm 文件
-
在被访问的 cfm 目录放置对应的自定义标签 cfm 文件, 这里直接访问了当前目录下面的 abc.cfm 这个自定义标签,并且没有设置参数:
<cf_abc>
实际上是自定义标签的另一种访问方法
这种方法可以指定特殊的路径
<cfmodule name="XXX" />
<cfmodule template="XXX.cfm" />
- name
- 表示自定义标签的名称
- 如果是
abc.cfm
直接写成abc
即可。 - 如果是在子文件夹中,就使用
subFolderName.abc
的形式 - 注意 name 和 template 参数不能同时使用
- 使用 name 参数首先会在当前文件夹搜索标签,然后再是 CustomTags 文件夹
- 使用 name 的时候总是无效?和服务器有关?
- template
- 表示对应自定义表单的文件名,需要写上扩展名
- 如果在子文件夹,可以使用典型相对路径
……/modules/abc.cfm
、modules/abc.cfm
- 注意
template
参数不支持绝对路径 - 注意 name 和 template 参数不能同时使用
-
在被调用的 CustomTag 中初始化参数(必须)
<cfparam name="ATTRIBUTES.message" type="string" default="this is msg"> <cfparam name="ATTRIBUTES.anothermsg" type="string" default="this is another msg"> <br> custom tag begins <br> <cfoutput> #ATTRIBUTES.message# <br> #ATTRIBUTES.anothermsg# </cfoutput> <br> custom tag ends <br>
-
注意参数前面的 Scope 为 ATTRIBUTES,这个 CFM 就将参数进行了输出
-
调用方法
-
在自定义标签的 CFM 中使用了
<cfparam>
所以如果没有赋值就出输出默认值 -
或者使用 isDefine()函数来进行查看
<cfmodule template="CustomTags/tagtest.cfm" message="this is test msg" message2="this is test msg">
-
需要注意设置哪些属性是可选的,哪些是必须的
- 使用 ATTRIBUTES 域,则对应的变量 SCOPE 仅仅是在这个 CT 里面
- 使用 CALLER 域,在 CT 里面定义的变量甚至可以在 CT 之外调用,但是在 CT 之外调用的时候不需要添加 CALLER 的前缀
- 如果多层调用 CT,那么就可能需要使用 CALLER.CALLER 甚至更多次层叠的前缀,这时候可以考虑使用 REQUEST 的域来使得对应的变量进行共享
如果标签没有成对出现,一定要在标签末尾加上斜杠, 否则报错
实际上有两种使用 CT 的方法
<cf_tagtest> …… </cf_tagtest>
<cf_tagtest var="xxx"/>
实际上第一种方法执行了两次
在 CT 中存在三个阶段
- Start
- 遇到开始标签之后立即执行,并触发 CT 的第一次执行
- 适合用于初步逻辑处理和输出
- 无法看到和修改 Tag 之间的内容
- Inactive
- 开始和结束之间的空闲期
- 将内容累积到一个 ThisTag.GeneratedContent 中并用作处理
- 通过对内置变量 ThisTag.ExecutionMode 来进行阶段判断
- End
- 在借宿标签之后立即执行,并触发 CT 的第二次执行
- 适合用于主要业务逻辑
- 可以看到也可以修改 Tag 之间的内容
<cf_tagtest var="xxx"> aaa </cf_tagtest> …… <cfif ThisTag.ExecutionMode EQ "START"> 123 <cfelse> 789 <cfset ThisTag.GeneratedContent="456"> </cfif>
可以看见 789 在 456 之前,但是输出依然为 123 456 789
- 首先运行到 Start,将 123 缓存
- 然后运行到 Inactive,将 aaa 保存到 ThisTag.GeneratedContent 并且预先放置到 123 缓存的后面
- 然后运行到 End,将 789 缓存,并将 ThisTag.GeneratedContent 里面的 aaa 改为 456
- 因此输出顺序就是 123 456(aaa) 789
关于本文
文章标题 | ColdFusion - Custom Tag 自定义标签 |
发布日期 | 2018-12-14 |
文章分类 | Tech |
相关标签 | #Coldfusion #Server |
留言板
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER
PLACE_HOLDER