2009-07-06 16 views
5

Khi sử dụng cfdirectory, làm cách nào để loại trừ tất cả các tệp cfm và liệt kê tất cả các tệp khác mà không chỉ định phần mở rộng tệp cho tất cả các tệp tôi muốn xem hoặc loại trừ một tệp cụ thể như index.html mà không cần truy vấn?Có thể nào đó để loại trừ các tệp bằng cfdirectory không?

Tôi đang tìm nội dung như sau, hãy chú ý thuộc tính bộ lọc.

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

hay:

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

Tại sao bạn lại chống lại ý tưởng sử dụng QoQ? Đó là một công cụ khá mạnh mẽ. –

+0

Tôi không chống lại nó, tôi chỉ tự hỏi nếu có một số goodies lọc không có giấy tờ tôi có thể sử dụng để có được công việc làm trong một tuyên bố chứ không phải là viết các câu lệnh QoQ hoặc cfif. – Jayson

Trả lời

6

Thuộc tính bộ lọc là vô ích nếu bạn đang cố gắng thực hiện loại trừ. Trường hợp tại điểm: Hôm qua tôi muốn sử dụng cfdirectory để lấy tất cả các thư mục con nhưng EXLCUDE bất kỳ thư mục nào bắt đầu bằng dấu chấm "." để tôi có thể loại trừ những thứ như ".svn" và ".git". Không cần phải nói rằng tôi đã tìm kiếm khắp nơi và không thể tìm thấy câu trả lời.

Trong khi kết thúc tôi đã kết thúc chỉ sử dụng một số logic có điều kiện trong vòng lặp của tôi:

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

nào đã hoàn thành công việc. Tất nhiên tôi có thể sử dụng một QoQ, nhưng để tôi thêm tất cả các chi phí trên để lọc ra các thư mục bắt đầu với một khoảng thời gian có vẻ ngớ ngẩn.

Điểm mấu chốt là, vâng, chúng tôi bị vặn khi nói đến lọc loại trừ với cfdirectory, nhưng không có lý do gì bạn không thể sử dụng trí tưởng tượng và một chút mã để có được kết quả mong muốn.

+0

Đó là vấn đề tôi sợ.Tôi đã hy vọng không phải sử dụng tất cả các loại câu lệnh cfif hoặc QoQ để có được những gì tôi muốn. Có lẽ Adobe sẽ có một bất ngờ cho chúng tôi trong CF9. Tôi tự hỏi nếu Railo hoặc OpenBD có bộ lọc tốt hơn cho thẻ cfdirectory? – Jayson

+0

yeah nó sucks để thêm tất cả logic này thêm, nhưng nếu bạn gói nó tất cả lên thành một udf và gọi là từ mẫu của bạn, cảm giác của hiếp dâm nhà tù biến mất O_o – rip747

+0

Đó là một phần lý do tại sao tôi thích sử dụng QofQ. Bạn có thể bọc mã trong một UDF trả về những gì bạn thực sự muốn từ CFDirectory. –

0

Tôi khá chắc chắn rằng! toán tử sẽ không hoạt động trong tham số bộ lọc.

Tôi không thấy cách thực hiện truy vấn truy vấn hoặc lặp qua truy vấn bằng cfoutput/cfloop và sau đó kiểm tra giá trị của từng tên tệp bằng câu lệnh cfif/cfcase để xem bạn có muốn hiện.

6

Không, không thể loại trừ tệp chỉ với một mình cfdirectory. Thuộc tính lọc chỉ xác định tệp cần bao gồm, với các ký tự đại diện kiểu DOS (*?).

Giải pháp đơn giản nhất có lẽ là để lọc sau khi thực tế với cfquery.

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

Có thể để làm điều này trong một đối tượng java với ..

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

..và một filename filter

Cá nhân, tôi nghĩ rằng bạn sẽ khấm khá hơn chỉ sử dụng một truy vấn truy vấn.

+0

Đó có thể là những gì cfdirectory sử dụng trong nội bộ. Nhưng tôi đồng ý QoQ sẽ là lựa chọn đơn giản hơn. – Leigh

2

Bạn có thể tạo thẻ tùy chỉnh chạy thư mục CF sau đó lặp qua kết quả (như bạn có) tạo một truy vấn mới hoặc cấu trúc với kết quả của bạn. Điều đó sẽ giúp bạn có thể sử dụng lại nhiều hơn trong các tình huống khác .

+0

Đó cũng là một ý kiến ​​hay. Một hàm lấy bộ lọc làm tham số và thực hiện một cfdirectory + QoQ. – Jayson

Các vấn đề liên quan