Цикл cfdirectory ограничивает результаты
Мне трудно это понять. Как я могу ограничить результаты только 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>
Когда я запускаю приведенный выше код, я получаю следующее сообщение об ошибке
Ошибка проверки атрибута для тега CFLOOP.
2 ответа
Если вы просматриваете полное сообщение об ошибке, оно содержит ответ (выделение мое):
У него недопустимая комбинация атрибутов: from,index,query,to. Возможные комбинации:
- Обязательные атрибуты: "запрос". Необязательные атрибуты: endrow, startrow.
- ...
- Обязательные атрибуты: 'from, index, to'. Необязательные атрибуты: "шаг".
Код пытается смешать два разных типа циклов: цикл запроса и цикл от / до. Это недопустимая комбинация. Вы можете использовать query
цикл ИЛИ from/to
петля, но не оба.
Сказав, что, поскольку цель состоит в том, чтобы отобразить результаты, в действительности нет необходимости cfloop
, Просто используйте cfoutput с атрибутами "startRow" и "maxRows":
<cfoutput query="listRoot" startRow="1" maxRows="50">
#name#<br>
</cfoutput>
Как уже упоминалось в другом ответе, последние версии CF также поддерживают for ...in
петли:
<cfscript>
for (row in listRoot) {
writeOutput("<br>Debug: name value = "& row.name );
}
</cfscript>
Вы можете получить доступ к определенным строкам в запросе с помощью:
query[columnName][rowIndex]
Для того, чтобы сделать from to loop
вместо each loop
, идти:
<cfoutput>
<cfloop from="1" to="50" index="i">
#listRoot["name"][i]#<br>
</cfloop>
</cfoutput>