Pregunta

Estoy usando ColdFusion para devolver un conjunto de resultados de una base de datos SQL y convertirlo en una lista.

Necesito alguna manera de generar un orden alfabético de la barra de navegación de la lista.He de ColdFusion y la biblioteca jQuery disponible.

Estoy mirando para generar algo como esto:

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

Dónde hacer clic en una de las cartas que te cae hacia abajo en la página para el primer elemento de esa carta.No todas las 26 letras del alfabeto son necesariamente en uso.

¿Fue útil?

Solución 4

Así, hay un montón de buenas sugerencias, pero ninguno hizo exactamente lo que yo quería.Afortunadamente fui capaz de usar de ellos para averiguar lo que realmente quería hacer.La única cosa que la siguiente no hace es imprimir los últimos sin usar letras (si las hay).Es por eso que tengo que cfif declaración de comprobación para la " W " ya que es la última carta que yo uso, de lo contrario, se debe comprobar la a a la 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>

Otros consejos

Para generar la barra de navegación, usted podría hacer algo como esto:

<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 no en los personajes, así que hay que convertir a los códigos ascii y espalda).


Para mostrar los elementos en su consulta que usted podría hacer algo como esto.

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

Usted podría utilizar la consulta de agrupación en función de la consulta de registros.Usted, evidentemente, tiene que cambiar los campos de consulta de acuerdo a sus datos y a la izquierda() la función puede ser una sintaxis diferente dependiendo de su motor de base de datos.La consulta funciona en 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>

Me gustaría conseguir el SQL conjunto de resultados para devolver la lista en el primer lugar, puede fácilmente tomar sólo la primera letra del elemento requerido, y un recuento.La forma más rápida sería hacer una combinación en una tabla, de 26 caracteres (menos de manipulación de cadenas de esa manera).

En la FQ utilizar el valor de cuenta para asegurarse de que, si no hay ningún resultado, ya sea sólo de visualización de la letra (como texto estándar) o no mostrarlo a todos.

Cuántas filas usted va a estar trabajando en como puede haber mejores maneras de hacer esto.Por ejemplo, el almacenamiento de la primera letra de su necesario vínculo de campo en una columna separada en el inserto de reducir la sobrecarga cuando la selección.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top