Question

Je suis à l'aide d' ColdFusion pour retourner un ensemble de résultats à partir d'une base de données SQL et d'en faire une liste.

J'ai besoin d'un moyen de générer de l'ordre alphabétique de la barre de navigation pour cette liste.J'ai ColdFusion et la bibliothèque jQuery disponibles.

Je suis à la recherche pour générer quelque chose comme ceci:

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

Où cliquant sur une des lettres vous dépose en bas de la page pour le premier élément de cette lettre.Pas tous les 26 lettres de l'alphabet sont nécessairement en cours d'utilisation.

Était-ce utile?

La solution 4

Donc, il y avait beaucoup de bonnes suggestions, mais aucun ne l'a fait exactement ce que je voulais.Heureusement, j'ai pu les utiliser pour comprendre ce que je voulais vraiment faire.La seule chose que le suivant ne pas le faire est d'imprimer le dernier quelques inutilisés lettres (si il y en a).C'est pourquoi j'ai que cfif déclaration de vérification pour " W " comme c'est la dernière lettre que j'utilise, sinon il doit vérifier 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>

Autres conseils

Pour générer la barre de navigation, vous pourriez faire quelque chose comme ceci:

<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 ne fonctionne pas sur les personnages, donc vous devez le convertir en ascii codes et à l'arrière.)


Pour afficher les éléments dans votre requête, vous pourriez faire quelque chose comme cela.

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

Vous pouvez utiliser la requête de regroupement fonction de votre requête de dossiers.Il faudra bien entendu modifier les champs de la requête en fonction de vos données et la gauche() la fonction peut être différente de la syntaxe en fonction de votre moteur de base de données.La requête ci-dessous fonctionne sur 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>

Je voudrais obtenir le SQL ensemble de résultats à retourner la liste, en premier lieu, vous pouvez facilement il suffit de prendre la première lettre de l'élément, et un nombre.Le moyen le plus rapide serait de faire une jointure sur une table de 26 caractères (moins de manipulation de chaîne de cette façon).

Dans la MUCOVISCIDOSE utiliser le comte valeur afin de s'assurer que si il n'y a pas de résultat, soit seulement l'affichage de la lettre (sous forme de texte standard) ou ne pas l'afficher du tout.

Le nombre de lignes que vous allez travailler sur car il peut y avoir de meilleures façons de le faire.Par exemple, le stockage de la première lettre de votre champ de lien dans une colonne séparée sur insérer permettrait de réduire les frais généraux lors de la sélection.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top