0

基本的に、私のウェブサイトに検索ページを作成し、各バンド名/トラック/ロケーション AZ を表示する必要があります。すべてのバンドをアルファベット順に一覧表示することに成功しましたが、ページの半分に 0 ~ 9、AL を表示し、もう半分に MZ を表示したいと考えています。Ascii チェック + カウントを使用して各バンドの最初の文字をチェックし、それらを正しいアルファベット グループに呼び出す方法はありますか? ありがとう。

4

2 に答える 2

1

文字列の最初の文字に基づいてクエリをセットに分割したいようです。CF 10 または Railo 4 では、Underscore.cfc の groupBy 関数を使用して、次のようにこれを実現できます。

_ = new Underscore();

bands_by_name = _.groupBy(bands, function(band) {
   var first_letter = left(band.name, 1);

   if (isNumeric(first_letter))
      return '0-9';
   else if (first_letter <= 'L')
      return 'A-L';
   else
      return 'M-Z';
});

groupBy(collection, callback)コレクションを反復処理し、コールバック関数を各項目に適用し、戻り値を使用してコレクション項目を新しい構造体にグループ化します。

この場合、bands_by_name構造体にはキー0-9A-L、およびがありM-Z、それぞれに関連する結果を含む構造体の配列が含まれます。例:

{
   '0-9': [{name: '1 Band', track: 5, location: 'CA'}, {name: '2Cool', track: 1, location: 'NM'}],
   'A-L': [{name: 'Good Band', track: 2, location: 'NY'}],
   'M-Z': [{name: 'Some Band', track: 3, location: 'PA'}, {name: 'What a Band', track: 2, location: 'NV'}]
}

注: Underscore.cfc ライブラリを作成しました。

于 2012-12-17T10:07:06.973 に答える
0

少し冗長ですが、リストにASCII値を追加/変更することで、列をすばやく変更できますbandGroups各列にデータがあると想定しています。

<!--- syntax may very depending on database --->
<cfquery ...>
  Select
      bandName
    , trackName
    , location
    , upper(left(bandName,1)) as firstLetter
  from
    someTable
  order by
    bandName
</cfquery>
<!--- 
  create a list of ascii values used to break up your columns
  this will allow you to easily change the number of columns
  End first group at L , end next group at [ (first char after "Z") 
--->
<cfset bandGroups = asc("M") & ',' & asc("[")>
<cfset thisGroup = 1>
<cfset header = '<div style = "float: left; width: #int(100/listLen(bandGroups))#%"><table>'>
<cfoutput>#header#</cfoutput>
    <cfoutput query = "query" group = "firstLetter">
        <tr>
            <td colspan="3">
              #query.firstLetter# 
            </td>
        </tr>
    <cfoutput>
        <tr>
          <td>#query.bandName#</td>
          <td>#query.trackName#</td>
          <td>#query.location#</td>
        </tr>
    </cfoutput>
    <cfif query.recordCount eq query.currentRow or asc(query.firstLetter) gte listGetAt(bandGroups, thisGroup)>
        <cfset thisGroup++>
        </table>
        </div>
        <cfif query.currentRow neq query.recordCount>
            #header#
        </cfif>
    </cfif>
</cfoutput>
于 2012-12-17T16:51:43.190 に答える