我在特定文件email_output.cfm中设置了cfmail函数,该文件需要传递给它的ID才能正常工作,例如email_output.cfm?ID = 1。我想设置一个运行查询的cron作业,返回要传递的各种所需ID。在测试中,我可以执行以下操作:
<cflocation url="email_output.cfm?ID=10" >
但是,由于cflocation停止所有其他执行并打开另一个页面,我无法遍历它。如何将参数从查询多次传递到单个CF页面?
谢谢 - 乔
答案 0 :(得分:2)
此自定义标记示例实现...
如果这是您第一次使用自定义标记,最简单的方法是将其放在与调用它的页面相同的文件夹中。将它放在不同的目录中有几个选项,但让我们开始简单。
EmailMembers.cfm
<cfquery name="GetUIDs">
select userid from users
</cfquery>
<cfoutput query="GetUIDs">
<cf_maileach uid="#userID#">
</cfoutput>
请注意我如何调用我的标签cf_maileach?
在同一目录中,放置maileach.cfm,看看名称是如何匹配的?
maileach.cfm
<cfif StructKeyExists(attributes,"uid") and val(attributes.uid) gt 0>
<cfquery name="getinfo">
select fname,lname,email
from users
where userID = <cfqueryparam cfsqltype="cf_sql_integer" value="#attributes.uid#">
</cfquery>
<cfmail to="#getinfo.email#" subject="Hi #getinfo.fname#">...</cfmail>
</cfif>
注释
<cfmodule>
<cfqueryparam>
,请查阅,使用它,喜欢它。编辑:虽然CFHTTP方法可以用于此目的,但它会遇到一些问题
以下是一些自行测试的示例代码。
文件夹的内容&#34; safe&#34;:
的Application.cfc
[ blank file, to negate my testing site's actual application.cfc ]
Testrun.cfm
<cfoutput><cfset starttick = GetTickCount()>
<cfloop from="1" to="20" index="i">
<cfhttp url="http://mysamesite.com/safe/http.cfm?u=#i#" method="get" result="test">
#test.filecontent#<br>
</cfloop>
CFHTTP Execution Time: #(GetTickCount() - starttick)#<br><br>
<cfset starttick = GetTickCount()>
<cfloop from="1" to="20" index="i">
<cf_testtag u="#i#"><br>
</cfloop>
CustomTag Execution Time: #(GetTickCount() - starttick)#<br><br>
</cfoutput>
testtag.cfm
<cfoutput>The ID entered was #attributes.u#</cfoutput>
http.cfm
<cfoutput>The ID entered was #url.u#</cfoutput>
结果(以毫秒为单位) 每个测试在HTTP上传递20次,在自定义标签上传递20次。
CFHTTP Tag
661ms 6ms
1624 5
616 5
460 4
522 6
816 4
答案 1 :(得分:2)
您也可以使用cfhttp
来完成此操作 <cfquery name="GetUIDs">
select userid from users
</cfquery>
<cfloop query="GetUIDs">
<cfhttp url="http://localhost:8500/cf10/test.cfm?id=#userid#" method="get" result="test">
</cfloop>