2009-07-06 7 views
5

Quando si utilizza cfdirectory, come posso escludere tutti i file cfm e elencare tutti gli altri senza specificare le estensioni di file per tutti i file che voglio vedere o escludere un file specifico come index.html senza fare una query di query?E 'possibile in qualche modo escludere file con cfdirectory?

Sto cercando qualcosa come il seguente, notare l'attributo del 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

Perché sei così contrario all'idea di utilizzare QoQ? È uno strumento piuttosto potente. –

+0

Non sono contrario, mi chiedevo solo se ci fossero alcuni filtri non documentati che potrei usare per portare a termine il lavoro in una dichiarazione piuttosto che scrivere istruzioni QoQ o cfif. – Jayson

risposta

6

L'attributo del filtro è inutile se si sta tentando di eseguire un'esclusione. Caso in questione: Proprio ieri volevo usare cfdirectory per afferrare tutte le sottodirectory ma EXLCUDE qualsiasi directory che iniziava con un punto "." in modo che potessi escludere cose come ".svn" e ".git". Inutile dire che ho cercato dappertutto e non ho trovato risposta.

Alla fine ho finito solo utilizzando alcuni logica condizionale nel mio ciclo:

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

che ha ottenuto il lavoro fatto. Naturalmente potevo usare un QoQ, ma aggiungere a me tutto quel sovraccarico per filtrare le directory iniziate con un periodo sembrava sciocco.

La linea di fondo è che, sì, siamo fregati quando si tratta del filtro di esclusione con cfdirectory, ma non c'è motivo per cui non si possa usare l'immaginazione e un po 'di codice per ottenere i risultati desiderati.

+0

Questo è il problema di cui avevo paura.Speravo di non dover usare tutti i tipi di istruzioni cfif o QoQ per ottenere ciò che voglio. Forse Adobe avrà una sorpresa per noi in CF9. Mi chiedo se Railo o OpenBD abbiano filtri migliori per il tag cfdirectory? – Jayson

+0

sì, fa schifo aggiungere tutta questa logica in più, ma se lo impacchetta tutto in un udf e lo chiami dal tuo modello, la sensazione di stupro di una prigione va via O_o – rip747

+0

Questo fa parte del motivo per cui preferisco usare QofQ. È possibile avvolgere il codice in una UDF che restituisce ciò che si desiderava realmente da CFDirectory. –

0

Sono abbastanza sicuro che il! l'operatore non funzionerà nel parametro del filtro.

Non vedo un modo per aggirare la query di query o eseguire il ciclo della query con un cfoutput/cfloop e quindi controllare il valore di ciascun nome di file con un'istruzione cfif/cfcase per vedere se lo si desidera mostrare.

6

No, non è possibile escludere file con cfdirectory da solo. L'attributo filter specifica solo quali file includere, con caratteri jolly in stile DOS (* e ?).

La soluzione più semplice è probabilmente quella di filtrare dopo il fatto con cfquery.

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

Potrebbe essere possibile fare questo in un oggetto Java con ..

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

..e un filename filter

Personalmente, penso che sarebbe meglio solo utilizzando una query di domande.

+0

Probabilmente è ciò che cfdirectory utilizza internamente. Ma sono d'accordo che il QoQ sarebbe l'opzione più semplice. – Leigh

2

È possibile creare un tag personalizzato che ha eseguito la directory CF, quindi eseguire il loop sui risultati (come se si fosse) creando una nuova query o una struttura con i risultati. Ciò renderebbe leggermente più riutilizzabile in altre situazioni .

+0

Anche questa è una buona idea. Una funzione che accetta un filtro come parametro e fa una cfdirectory + QoQ. – Jayson

Problemi correlati