2016-06-13 8 views
1

Je trouve cela difficile à comprendre. Comment puis-je limiter les résultats à 50 seulement. Disons si dans le répertoire j'ai 1000 fichiers, comment puis-je le limiter de sorte que seulement 50 fichiers sont en boucle.La boucle cfdirectory limite les résultats

<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> 

Quand je lance le code ci-dessus je reçois le message d'erreur suivant

Attribute erreur de validation pour la balise CFLOOP.

Répondre

6

Si vous passez en revue la complète message d'erreur, il contient la réponse (emphase mienne):

Sa combinaison d'attributs est incorrecte: from, index, query, to. combinaisons possibles sont:

  • Attributs obligatoires: 'query'. Attributs optionnels: 'endrow, startrow'.
  • ...
  • Attributs obligatoires: 'from, index,'. Attributs optionnels: 'étape'.

Le code tente de mélanger deux types de boucles différentes: boucle d'interrogation et de/vers la boucle. Ce n'est pas une combinaison valide. Vous pouvez utiliser une boucle queryou une boucle from/to, mais pas les deux. Cela dit, puisque l'objectif est d'afficher la sortie, il n'y a vraiment pas besoin de cfloop. Il suffit d'utiliser cfoutput avec le "startRow" et "maxRows" Attributs:

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

Comme mentionné dans l'autre réponse, les versions récentes des FC prennent également en charge for ...in loops:

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

Vous pouvez accéder à des lignes spécifiques dans une requête avec:

query[columnName][rowIndex]

Pour faire from to loop au lieu d'un each loop, aller:

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