2009-07-06 14 views
5

Al usar cfdirectory, ¿cómo podría excluir todos los archivos cfm y enumerar todos los demás sin especificar las extensiones de archivo para todos los archivos que deseo ver, o excluir un archivo específico como index.html sin hacer una consulta de consulta?¿Es posible de alguna manera excluir archivos con cfdirectory?

Estoy buscando algo como lo siguiente, observe el atributo de filtro.

<cfdirectory directory="#ExpandPath('./')#" action="list" name="qryFiles" filter="!index.html" sort="name ASC" listinfo="name"> 

o:

<cfdirectory directory="#ExpandPath('./')#" action="list" name="qryFiles" filter="!*.cfm" sort="name ASC" listinfo="name"> 
+2

¿Por qué estás tan en contra de la idea de usar QoQ? Es una herramienta bastante poderosa. –

+0

No estoy en contra, solo me preguntaba si había algunos elementos de filtro no documentados que podría utilizar para hacer el trabajo en una declaración en lugar de escribir declaraciones de QoQ o cfif. – Jayson

Respuesta

6

El atributo de filtro no sirve para nada si intenta hacer una exclusión. Ejemplo: ayer mismo quería usar cfdirectory para tomar todos los subdirectorios pero EXLCUDE cualquier directorio que comenzó con un punto "." para poder excluir cosas como ".svn" y ".git". No hace falta decir que busqué por todos lados y no pude encontrar una respuesta.

Al final acabé utilizando alguna lógica condicional en mi bucle:

<cfloop query="mydir"> 
    <cfif left(name, 1) neq "."> 
    <!--- do some code ---> 
    </cfif> 
</cfloop> 

¿Qué hizo el trabajo. Por supuesto que podría usar un QoQ, pero agregar todos esos gastos generales para filtrar los directorios que comenzaron con un período me pareció una tontería.

En pocas palabras, sí, estamos equivocados cuando se trata de filtrar por exclusión con cfdirectory, pero no hay razón por la que no puedas usar tu imaginación y un poco de código para obtener los resultados que deseas.

+0

Ese es el problema al que tenía miedo.Esperaba no tener que usar todo tipo de declaraciones cfif o QoQ para obtener lo que quiero. Quizás Adobe tenga una sorpresa para nosotros en CF9. Me pregunto si Railo o OpenBD tienen mejores filtros para la etiqueta cfdirectory. – Jayson

+0

sí, es una mierda agregar toda esta lógica extra, pero si empaqueta todo en un udf y lo llama desde su plantilla, la sensación de violación en prisión se va O_o – rip747

+0

Esa es la razón por la que prefiero usar QofQ. Puede ajustar el código en una UDF que devuelve lo que realmente quería de CFDirectory. –

0

estoy seguro de que el! el operador no funcionará en el parámetro de filtro.

No veo una forma de evitar hacer una consulta o recorrer la consulta con un cfoutput/cfloop y luego verificar el valor de cada nombre de archivo con una declaración cfif/cfcase para ver si lo desea aparecer.

6

No, no es posible excluir archivos con cfdirectory solo. El atributo de filtro solo especifica qué archivos incluir, con comodines de estilo de DOS (* y ?).

La solución más simple es probablemente filtrar después del hecho con cfquery.

<cfquery name="qryFiles" dbtype="query"> 
    SELECT * FROM qryFiles 
    WHERE name not like '%.cfm' 
</cfquery> 
1

Puede ser posible hacer esto en un objeto de Java con ..

CreateObject("java", "java.io.File"); 

..y un filename filter

En lo personal, creo que sería mejor simplemente mediante una consulta de consultas.

+0

Eso es probablemente lo que cfdirectory usa internamente. Pero estoy de acuerdo que la QoQ sería la opción más simple. – Leigh

2

Podrías crear una etiqueta personalizada que ejecutara el directorio CF y luego enlazar los resultados (como lo has hecho) construyendo una nueva consulta o una estructura con tus resultados. Eso haría que sea un poco más reutilizable en otras situaciones .

+0

Esa es una buena idea también. Una función que toma un filtro como parámetro y hace un cfdirectory + QoQ. – Jayson

Cuestiones relacionadas