2008-08-19 17 views
6

Tôi đang sử dụng ColdFusion để trả lại tập hợp kết quả từ cơ sở dữ liệu SQL và biến nó thành danh sách.Điều hướng theo thứ tự động

Tôi cần một số cách để tạo thanh điều hướng theo thứ tự chữ cái cho danh sách đó. Tôi có ColdFusion và thư viện jQuery có sẵn.

tôi đang tìm cách để tạo ra một cái gì đó như thế này:

A | B | C | ...      
- A 
- A 
- B 
- B 
- B 
- C 
- D 

đâu cách nhấp vào một trong các chữ cái giọt bạn xuống trang đến mục đầu tiên cho bức thư đó. Không phải tất cả 26 chữ cái trong bảng chữ cái đều nhất thiết được sử dụng.

Trả lời

0

Vì vậy, có rất nhiều đề xuất hay, nhưng không có đề xuất chính xác những gì tôi muốn. May mắn thay tôi đã có thể sử dụng chúng để tìm ra những gì tôi thực sự muốn làm. Điều duy nhất sau đây không làm là in vài chữ cái chưa sử dụng cuối cùng (nếu có). Đó là lý do tại sao tôi có câu lệnh cfif kiểm tra 'W' vì đó là chữ cái cuối cùng tôi sử dụng, nếu không nó sẽ kiểm tra Z.

<cfquery datasource="#application.dsn#" name="qTitles"> 
SELECT title, url, substr(titles,1,1) as indexLetter 
FROM list 
ORDER BY indexLetter,title 
</cfquery> 

<cfset linkLetter = "#asc('A')#"> 
<cfoutput query="titles" group="indexletter"> 
    <cfif chr(linkLetter) eq #qTitles.indexletter#> 
     <a href="###ucase(qTitles.indexletter)#">#ucase(qTitles.indexletter)#</a> 
     <cfif asc('W') neq linkLetter>|</cfif> 
     <cfset linkLetter = ++LinkLetter> 
    <cfelse> 
     <cfscript> 
     while(chr(linkLetter) != qTitles.indexletter) 
       { 
         WriteOutput(" " & chr(linkLetter) & " "); 
         IF(linkLetter != asc('W')){WriteOutput("|");}; 
         ++LinkLetter; 
       } 
     </cfscript> 

     <a href="###ucase(qTitles.indexletter)#">#ucase(qTitles.indexletter)#</a> 
     <cfif asc('W') neq linkLetter>|</cfif> 
     <cfset linkLetter = ++LinkLetter> 
    </cfif> 
</cfoutput> 

<ul> 
<cfset currentLetter = ""> 
<cfoutput query="qTitles" group="title"> 
<cfif currentLetter neq #qTitles.indexletter#> 
    <li><a name="#ucase(qTitles.indexletter)#">#ucase(qTitles.indexletter)#</a></li> 
</cfif> 
<cfset currentLetter = #qTitles.indexletter#> 
<li><a href="#url#">#title#</a></li> 
</cfoutput> 
</ul> 
1

Tôi sẽ nhận được kết quả SQL được đặt để trả về danh sách ở vị trí đầu tiên, bạn có thể dễ dàng chỉ lấy chữ cái đầu tiên của mục được yêu cầu và số đếm. Cách nhanh nhất là tham gia vào một bảng gồm 26 ký tự (ít thao tác chuỗi như vậy).

Trong CF sử dụng giá trị đếm để đảm bảo rằng nếu không có kết quả, bạn chỉ hiển thị chữ cái (dưới dạng văn bản chuẩn) hoặc không hiển thị nó.

Có bao nhiêu hàng bạn sẽ làm việc vì có thể có cách tốt hơn để thực hiện việc này. Ví dụ, lưu trữ chữ cái đầu tiên của trường liên kết bắt buộc của bạn trong một cột riêng biệt trên chèn sẽ làm giảm chi phí khi chọn.

4

Để tạo thanh điều hướng, bạn có thể làm một cái gì đó như thế này:

<cfoutput> 
<cfloop from="#asc('A')#" to="#asc('Z')#" index="i"> 
    <a href="###chr(i)#">#chr(i)#</a> 
    <cfif asc('Z') neq i>|</cfif> 
</cfloop> 
</cfoutput> 

(. CFLOOP không hoạt động trên nhân vật, vì vậy bạn phải chuyển đổi sang mã ascii và sau)


Để hiển thị các mục trong truy vấn của bạn, bạn có thể làm một cái gì đó như thế này.

<cfset currentLetter = ""> 
<cfoutput query="data"> 
<cfif currentLetter neq left(data.name, 1)> 
    <h3><a name="#ucase(left(data.name, 1))#">#ucase(left(data.name, 1))#</a></h3> 
</cfif> 
<cfset currentLetter = left(data.name, 1)> 
#name#<br> 
</cfoutput> 
+0

Điều này rất hữu ích trong việc tìm kiếm câu trả lời cuối cùng. không được sử dụng. Tôi đã đăng giải pháp cuối cùng của tôi, nhưng không thể tìm ra cách để làm cho nó một câu trả lời của cộng đồng. – alexp206

2

Bạn có thể sử dụng chức năng nhóm truy vấn trên truy vấn hồ sơ của mình. Bạn rõ ràng sẽ phải thay đổi các trường truy vấn theo dữ liệu của bạn và hàm left() có thể là cú pháp khác nhau tùy thuộc vào cơ sở dữ liệu của bạn. Truy vấn dưới đây hoạt động trên MSSQL.

<cfquery datasource="#application.dsn#" name="qMembers"> 
SELECT firstname,lastname, left(lastname,1) as indexLetter 
FROM member 
ORDER BY indexLetter,lastName 
</cfquery> 


<p id="indexLetter"> 
<cfoutput query="qMembers" group="indexLetter"> 
    <a href="###qMembers.indexLetter#">#UCase(qMembers.indexLetter)#</a> 
</cfoutput> 
</p> 




<cfif qMembers.recordCount> 

    <table> 

    <cfoutput query="qMembers" group="indexLetter"> 
     <tr> 
      <th colspan="99" style="background-color:##324E7C;"> 
       <a name="#qMembers.indexLetter#" style="float:left;">#UCase(qMembers.indexLetter)#</a> 
       <a href="##indexLetter" style="color:##fff;float:right;">index</a> 
      </th> 
     </tr> 

     <cfoutput> 
     <tr> 
      <td><strong>#qMembers.lastName#</strong> #qMembers.firstName#</td> 
     </tr> 
     </cfoutput> 
    </cfoutput> 

    </table> 

<cfelse> 
    <p>No Members were found</p> 
</cfif> 
+0

Vấn đề duy nhất với điều này là nó không in các chữ cái không sử dụng. Nó chỉ in các chữ cái được sử dụng, đó là cực khác từ nơi tôi bắt đầu. – alexp206