cfdirectory 循环限制结果

cfdirectory loop limit the results

我发现很难理解这一点。我怎样才能将结果限制为 50 个。比方说,如果在目录中我有 1000 个文件,我如何限制它以便只循环 50 个文件。

<cfdirectory action="list" directory="#ExpandPath('/downloaded/')#" name="listRoot" filter="*.xml" recurse="false" sort="datelastmodified asc">
<cfoutput>
   <cfloop query="listRoot" from="1" to="50" index="i">
           ....
   </cfloop>
</cfoutput>

当我运行上面的代码时,我得到以下错误信息

Attribute validation error for tag CFLOOP.

您可以通过以下方式访问查询中的特定行:

query[columnName][rowIndex]

为了执行 from to loop 而不是 each loop,执行:

<cfoutput>
    <cfloop from="1" to="50" index="i">
        #listRoot["name"][i]#<br>
    </cfloop>
</cfoutput>

如果您查看完整的错误消息,它包含答案(强调我的):

It has an invalid attribute combination: from,index,query,to. Possible combinations are:

  • Required attributes: 'query'. Optional attributes: 'endrow,startrow'.
  • ...
  • Required attributes: 'from,index,to'. Optional attributes: 'step'.

该代码试图混合两种不同类型的循环:查询循环和 from/to 循环。那不是有效的组合。您可以使用 query 循环 from/to 循环,但不能同时使用两者。

话虽如此,既然目标是显示输出,那么cfloop确实没有必要。只需将 cfoutput 与 "startRow" 和 "maxRows" 属性一起使用:

   <cfoutput query="listRoot" startRow="1" maxRows="50">
       #name#<br>
   </cfoutput>

正如另一个答案中提到的,最新版本的 CF 也支持 for ...in loops:

<cfscript>
   for (row in listRoot) {
      writeOutput("<br>Debug: name value = "& row.name );
   }
</cfscript>