如何按日期修改CFLoop到输出项目

时间:2014-02-05 15:24:42

标签: coldfusion cfloop

我的查询包含一系列日期和其他详细信息。目前,如果查询返回4个日期,例如(2/27/20142/28/20143/1/20143/2/2014),我的代码将循环播放所有日期,并将相应的项目置于其正确的位置在面板上的一天。因此,它生成4个面板,每个面板包含一个日期。

如何调整代码,使其输出2个面板(每个2个日期),而不是4个面板,每个面板包含一个日期?感谢。

old_date = "";
<cfloop query="getItinerary">
   <cfset cur_date = dateFormat(start_date,"m/d/yy")>
   <cfif old_date NEQ cur_date>
    <cfif old_date NEQ "">
        <cfoutput>
            CODE TO END PANEL AND START A NEW ONE       
            </cfoutput>
    </cfif>
    <cfoutput>
        ITINERARY ITEM DATE     
    </cfoutput>     
   </cfif>

   <cfoutput>
    ITINERARY ITEM INFO DETAILS
   </cfoutput>  
</cfloop>
    <cfoutput>
        CODE TO END PANEL
    </cfoutput>

2 个答案:

答案 0 :(得分:2)

你有没有试过这样的东西来查询?它将一次显示2个记录结果集。

<cfif getItinerary.CurrentRow MOD 3>  
...

答案 1 :(得分:0)

我认为这个问题没有得到完全回答,所以我会试一试。 您要做的是使用模数运算符将数据分成块,在本例中为面板。这可能看起来很简单,但它可能很棘手,因为ColdFusion的基本索引为1.因此,使用其他语言(如Java)的逻辑,使用基本索引为零并不能按预期工作。以下是我认为您正在寻找的代码:

  <!---Note that CMFL/ColdFusion programming is not my thing so the syntax may be a bit off, however the logic should work but I'm sure an actual ColdFusion programmer can write more optimal code--->

<!---we start by setting a locally scoped variable to use as a counter in base 0 --->
<cfset var iCount = 0>
<!--- loop over all the items in the query --->
<cfloop query="getItinerary">
    <!--- if the current value of iCount is divisible by 2 then proceed--->
    <cfif iCount MOD 2 EQ 0>
        <!---first time around 0 mod 2 = 0--->
        <cfif iCount EQ 0>
            <!--- insert the opening panel tag--->
            [insert panel opening tag(s)]
        <cfelseif iCount < getItinerary.recordCount>
             <!---its not the first panel and it is not the last record --->
             [insert closing tag(s) of previous panel]
             [insert opening tag(s) of next panel]
        </cfelse>             
        </cfif>
    </cfif>
    <cfoutput>
        <!--- insert the date you would like listed within the panel --->
        #dateFormat(getItinerary.start_date,"m/d/yy")#
    </cfoutput>
    <cfset iCount = iCount + 1>
    <!---check if that was the last record, if so, close last the panel--->
    <cfif iCount EQ getItinerary.recordCount>
         [insert panel closing tag(s)]
    </cfif>
</cfloop>

请注意,上面的代码假设至少有一条记录。如果无法记录,请相应地添加代码。使用带有基数1索引的mod 2也会在第一个面板上显示错误的日期数。此外,mod 3将在第一个面板上给你2个日期,之后在所有其他面板上给出3个日期(尽管在这种情况下,因为限制为4,基础1 mod 3可能有效,但如果限制被更改则会破坏)。 / p>