Frage

Ich bin mit ColdFusion die Rückkehr ein Ergebnis einer SQL-Datenbank und verwandeln Sie es in eine Liste.

Ich muss einige Weg, um zu generieren, eine alphabetische Navigationsleiste für diese Liste.Ich habe ColdFusion und die jQuery-Bibliothek zur Verfügung.

Ich bin auf der Suche zu generieren, so etwas wie dieses:

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

Wo ein Klick auf einen der Buchstaben, Tropfen Sie unten auf der Seite auf den ersten Punkt für den Brief.Nicht alle 26 Buchstaben des Alphabets sind unbedingt benutzen.

War es hilfreich?

Lösung 4

Also, es gab viele gute Vorschläge, aber keiner wusste genau, was ich wollte.Glücklicherweise war ich in der Lage, Sie zu nutzen, um herauszufinden, was ich wirklich tun wollte.Das einzige, was im folgenden nicht tun, ist drucken der letzten paar nicht verwendete Buchstaben (falls vorhanden).Das ist, warum ich habe, dass cfif-Anweisung überprüfen für 'W', wie das ist der Letzte Brief, den ich verwenden, ansonsten sollte geprüft werden, ob 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>

Andere Tipps

Zum generieren der Navigationsleiste, Sie könnten etwas tun wie diese:

<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 funktioniert nicht auf Zeichen, so müssen Sie konvertieren ascii-codes und zurück.)


Um die Elemente anzuzeigen, die Sie in Ihrer Abfrage, Sie könnte so etwas tun.

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

Sie könnte verwenden Sie den Abfrage-grouping-Funktion, auf die Abfrage der Datensätze.Sie haben offensichtlich ändern Sie die Abfrage Felder entsprechend Ihrer Daten und die left () - Funktion kann eine andere syntax je nach Datenbank-engine.Die folgende Abfrage funktioniert auf 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>

Ich würde die SQL-Ergebnismenge zu Rückkehr die Liste an Erster Stelle, Sie können leicht nehmen Sie einfach den ersten Buchstaben des gewünschten Elements, und eine Anzahl.Der Schnellste Weg wäre eine Verknüpfung mit einer Tabelle von 26 Zeichen (weniger string-manipulation, die Art und Weise).

In der CF-Verwendung der count-Wert, um sicherzustellen, dass, wenn es ist kein Ergebnis, das Sie entweder nur die Buchstaben (Standardtext) oder nicht angezeigt wird.

Wie viele Zeilen sind Sie gehen zu arbeiten auf, da es möglicherweise bessere Möglichkeiten, dies zu tun.Zum Beispiel, speichern Sie den ersten Buchstaben Ihres gewünschten link-Feld in einer separaten Spalte einfügen würde, reduzieren den Aufwand bei der Auswahl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top