我有一个包含五列的数据库表(星期一到星期五)。列值为1(工作日)或0(不是工作日)。我正在尝试创建cfif
语句,该语句仅在cfloop
的实际日期为工作日时执行。我想我需要一个动态的if语句,还是有另一种方法来解决我的问题?
我知道以下代码不起作用,但(我希望)它显示了我想要的东西。谢谢你的帮助
<cfset ifstatement = "">
<cfif realholidays.Montag is 0>
<cfset ifstatement = " AND #DayOfWeek(holidaydatum)# is not 2">
</cfif>
<cfif realholidays.Dienstag is 0>
<cfset ifstatement = " AND #DayOfWeek(holidaydatum)# is not 3">
</cfif>
<cfif realholidays.Mittwoch is 0>
<cfset ifstatement = " AND #DayOfWeek(holidaydatum)# is not 4">
</cfif>
<cfif realholidays.Donnerstag is 0>
<cfset ifstatement = " AND #DayOfWeek(holidaydatum)# is not 5">
</cfif>
<cfif realholidays.Freitag is 0>
<cfset ifstatement = " AND #DayOfWeek(holidaydatum)# is not 6">
</cfif>
<cfif #DayOfWeek(holidaydatum)# is not 1#ifstatement#>...</cfif>
The result should be:
<cfif #DayOfWeek(holidaydatum)# is not 1 AND #DayOfWeek(holidaydatum)# is not 3 AND #DayOfWeek(holidaydatum)# is not 5></cfif>
答案 0 :(得分:1)
动态if语句很少听起来会解决任何无法以“更清晰”和更易读的方式实现的问题。
您可能希望研究使用函数(cffunction)。由于你的例子难以理解,我只能提供一些伪代码来帮助你。
<cffunction name="isHoliday">
<cfargument name="realholidaysValue" type="string" required="false" default="" />
<cfargument name="holidaydatum" type="string" required="false" default="" />
</cffunction>
<cfif isHoliday(realholidays, 1)></cfif>
您可能需要考虑的其他事项,因为您的示例有多个条件,即使用cfstruct或cfswitch进行查找:
<cfswitch expression="#DayOfWeek(holidaydatum)#">
<cfcase value="1">
... do something, return etc
</cfcase>
</cfswitch>
<cfset lookup.Donnerstag="5" />
<cfset lookup.Mittwoch="4" />
尝试将问题分解为更小,更清晰的例程,然后重新构建它们以解决您的整体问题 - 当您在6个月内回到它时,您会感谢自己。
答案 1 :(得分:0)
与动态生成代码相关的一般方法在理论上听起来不错,但在实践中存在问题。考虑这个动态创建的CF代码的简单示例。
<cfif condition1>
<cfset dynamicCode = "
<cfif condition2>
code for condition2 being true
<cfelse>
code for condition2 being false
</cfif>">
<cfelse>
<cfset dynamicCode = "some different programing code than above">
</cfif>
<cfoutput>
#dynamicCode#
</cfoutput>
有人可能认为这会导致dynamicCode被执行,但事实并非如此。事实上,它甚至不会卷曲。它只是一个将显示的字符串变量。
如果你想要它执行,你必须:
cffile
。cfinclude
标记的文件。这当然是一般的。根据您的问题,我认为您不需要像所有人那样创建动态代码。