在CF中,我可以使用变量作为名称来调用自定义标签吗?

Ven*_*eni 4 coldfusion cfml

我想使用名称中的变量来调用自定义标签。像这样

<cfset slist = 'product_categories'>
<cf_cu_show_#slist#>
Run Code Online (Sandbox Code Playgroud)

这给我#上的错误。自定义标签cu_show_product_categories存在,并且以常规方式调用时起作用。这个想法是建立一个循环列表,调用几个自定义标签。

<cfset slist = 'product_categories'>
<cfif a = 'blogs'>
    <cfset slist = listAppend(slist,"blogs")>
</cfif>
<cfif b = 'posts'> 
    <cfset s_list = listAppend(slist,"last_posts")>
</cfif>
<cfloop list="#slist#" index="i">
    <cf_cu_show_#i#>
</cfloop>
Run Code Online (Sandbox Code Playgroud)

我尝试使用Google,但找不到任何有用的东西。任何帮助,将不胜感激。

use*_*119 8

您已经发现,在调用自定义标签中使用变量名是无效的。解决此问题的方法是改用<cfmodule>语法来调用自定义标签。在第一种情况下,您将这样称呼它。

<cfset slist = 'product_categories'>
<cfmodule template="cu_show_#slist#.cfm">
Run Code Online (Sandbox Code Playgroud)

在下面的示例中,您将这样修改代码。

<cfset slist = 'product_categories'>
<cfif a = 'blogs'>
    <cfset slist = listAppend(slist,"blogs")>
</cfif>
<cfif b = 'posts'> 
    <cfset s_list = listAppend(slist,"last_posts")>
</cfif>
<cfloop list="#slist#" index="i">
    <cfmodule template="cu_show_#i#.cfm">
</cfloop>
Run Code Online (Sandbox Code Playgroud)

这是有关如何使用的文档链接<cfmodule>https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-mo/cfmodule.html

我还找到了另一个不错的链接,它们在此处演示您需要动态提供标签名称的情况,如此处所示,网址https://flylib.com/books/en/2.375.1.420/1/

  • 重要的是要注意,我认为应该对这个答案进行编辑以反映这一点,一个自定义标签通常被调用两次,一次在开始时(thisTag.executionMode ==“ start”),一次在结束时(thisTag.executionMode ==“结束”)。当您使用cfmodule调用自定义标记时,在开始时仅被调用一次。 (4认同)
  • 在&lt;cf_&gt;语法和&lt;cfmodule&gt;语法中,如果关闭了自定义标签,则仅第二次调用该标签。这可以通过在标记的“&gt;之前添加“ /”或通过使用结束标记来完成。cfmodule的使用不会改变其工作方式的基本性质。 (2认同)
  • 当包含/执行的文件名中包含动态部分时,渗透测试者喜欢抱怨。请注意,不要将URL或FORM变量作为文件名传递。 (2认同)