1

这是一个有点棘手的问题,但是,我的大多数评级乐队的页面会按照他们的评级高低显示乐队徽标。我唯一的问题是我想通过使用从 1 到 10 的 cfloop 来计算记录,因为它被分成两列,一个从 1 到 9,另一个从 2 到 10,每个都有步骤二。

有人可以帮我吗?如果我感到困惑,只需提及它并尝试澄清我的意思。

    <DIV class="community_middle">

    <cfoutput query="top10MostRated">
        <cfloop from="2" to="10" index="i" step="2">
        <DIV class="communityContent">
                            #chr(i)#
            <IMG src="logo/#top10MostRated.Logo#" alt="#top10MostRated.Name#" width="100%" height="100%"></IMG>
        </DIV>
        <BR/>
        </cfloop>
    </cfoutput>

</DIV>
4

5 回答 5

2

如果您希望单独执行奇数/偶数列表,则可以使用查询的 currentrow 属性与模运算符 (%) 结合使用来确定该行是奇数还是偶数:

<cfloop query="topBands>
  <cfif topBands.currentRow % 2 = 1>
    <!--- do your odd number output here --->
  </cfif>
</cfloop>
<cfloop query="topBands>
  <cfif topBands.currentRow % 2 = 0>
    <!--- do your even number output here --->
  </cfif>
</cfloop>
于 2012-12-12T12:29:40.417 回答
2

我认为这些答案解决了您问题的并列部分,但没有解释“相同图像”问题。他们的代码编写正确,但没有解释原因。

你的代码:

        <IMG src="logo/#top10MostRated.Logo#" 
             alt="#top10MostRated.Name#" 
             width="100%" height="100%"></IMG>


...如果您只在 a <cfloop query = "top10MostRated">or<cfoutput query = "top10MostRated">块内就可以了。原因是因为在这些类型的块中,CF 足够聪明,可以知道您想要当前行的数据。这将与以下内容相同:

        <IMG src="logo/#top10MostRated.Logo[top10MostRated.currentRow]#" 
             alt="#top10MostRated.Name[top10MostRated.currentRow]#" 
             width="100%" height="100%" />


因为您将 to/from 嵌套cfloop在一个<cfoutput query = "">块内,所以您会得到意想不到的结果。您现有的代码总是要求您的外部循环提供的记录。因此,您会看到相同的图像 5 次。(使用提供的任何优秀示例将帮助您摆脱这种情况)但是,您可以从您的查询中删除查询,cfoutput并简单地要求 CF 使用您的索引向您显示循环中正确行的值(您将索引设置为"i") 所以下面会显示与你的循环相对应的图像。

        <IMG src="logo/#top10MostRated.Logo[i]#" 
              alt="#top10MostRated.Name[i]#" 
              width="100%" height="100%" />
于 2012-12-12T15:13:40.177 回答
0

听起来您想要得到的是偶数记录的集合和奇数记录的集合。在 Coldfusion 10 或 Railo 4 中,您可以使用Underscore.cfc 中的 groupBy()将查询结果拆分为可管理的子集,如下所示:

_ = new Underscore();// instantiate the library
groupedBands = _.groupBy(topBands, function (val, index) {
   return index % 2 ? "odd" : "even";
}); 

这将返回一个具有两个元素odd和的结构even,每个元素都包含一个奇数或偶数记录数组。示例结果:

{
   odd: [{name: "Band one"}, {name: "Band three"}],
   even: [{name: "Band two"}, {name: "Band four"}]
}

将结果拆分为逻辑子集使代码更具可读性:

<cfoutput>
   <cfloop from="1" to="5" index="i">
      <div class="left">#groupedBands.odd[i].name#</div>
      <div class="right">#groupedBands.even[i].name#</div>
   </cfloop>
</cfoutput>

如果需要,您还可以在页面的其他位置使用这些子集。

注意:我写了 Underscore.cfc

于 2012-12-12T18:19:15.950 回答
0

本·纳德(Ben Nadel)为此专门写了一篇文章。链接在这里 对此的细分是

<cfloop query="top10MostRated">
    <cfif top10MostRated.CurrentRow MOD 2>
        <!--- Add to the "odd list" --->
    <cfelse>
        <!--- Add the record to the "even list" --->
    </cfif>
</cfloop>

然后你将有 2 个列表oddListevenList。然后只是显示它们的问题。

于 2012-12-12T12:31:27.690 回答
0

我会用不同的方式来做。目标是并排记录 1 和 2,我在@barnyr 的回答中看不到这一点。

<cfoutput>
<cfloop from="2" to="topbands.recordcount + 1" index = "i" step="2">
    #topbands.fieldname[i-1]#  
    <cfif i lte topbands.recordcount>
        #topbands.fieldname[i]# <br />
    </cfif>
</cfloop>
</cfoutput>
于 2012-12-12T13:06:27.623 回答