Цикл 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>
Другие вопросы по тегам