Цикл 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.


person Devil Raily    schedule 13.06.2016    source источник


Ответы (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 ...inloops /а>:

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

Вы можете получить доступ к определенным строкам в запросе с помощью:

query[columnName][rowIndex]

Чтобы сделать from to loop вместо each loop, выполните:

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