В CF, я могу вызвать пользовательский тег, используя переменную для его имени? - PullRequest
4 голосов
/ 17 октября 2019

Я хотел бы вызвать пользовательский тег, используя переменную в его имени. Вот так

<cfset slist = 'product_categories'>
<cf_cu_show_#slist#>

Это дает мне ошибку на #. Пользовательский тег 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>

Я пытался Google, но не могу найти ничего полезного. Любая помощь будет оценена.

1 Ответ

8 голосов
/ 17 октября 2019

Как вы уже обнаружили, использование имени переменной при вызове пользовательского тега недопустимо. Обходной путь - вызвать пользовательский тег с использованием синтаксиса <cfmodule>. В вашем первом сценарии вы бы назвали его следующим образом.

<cfset slist = 'product_categories'>
<cfmodule template="cu_show_#slist#.cfm">

В нижнем примере вы изменили бы свой код как таковой.

<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>

Вот ссылка на документацию о том, какиспользуйте <cfmodule>. https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-tags/tags-m-o/cfmodule.html

Я также нашел другую приличную ссылку, где они демонстрируют ваш сценарий, в котором вам нужно динамически указывать имя тега, как показано здесь на https://flylib.com/books/en/2.375.1.420/1/

...