掲載誌情報
掲載誌 Web Creators 2002/03
タイトル ColdFusion入門/ショッピングサイト構築 第2回
第1回 第2回 第3回 第4回

4. 商品一覧表示

■まずは、一覧を表示させてみる。

 カテゴリ、商品一覧を表示する
    ようやく準備も整ったので、ColdFusionでプログラミングを開始しよう。
まずはモックアップ画面を意識せず、とにかくデータベースの情報を画面に表示させてみることとする。

shoppingフォルダの中にある「samplelist.cfm」をダブルクリックすると、ColdFusionStudioでsample.cfmが開かれる。
    スクリーン
    カテゴリを取得する
    始めにカテゴリテーブル「M_Category」の全てのデータを取得するクエリ(データベースへの問い合わせ命令)を発行する。第1回でデータベースのデータ操作を行うタグはcfqueryタグを使用することを説明したので、cfqueryタグを用いた記述を見てみよう。
<!---M_Categoryテーブル全件取得クエリ--->
<cfquery name="M_CategoryQry" datasource="TableWare">
  SELECT * FROM M_Category
</cfquery>
M_Categoryテーブルの全てのデータを取得するクエリ
Cfqueryタグには様々な属性があるが、ここでは「name」という属性と「datasource」属性を使用する。「name」属性にはクエリ変数名を記入する。

ここで「変数」という言葉が出てきたが、変数とは「ある値を入れる容器」だと考えていただきたい。ここでのある値とはM_Categoryテーブルの全データとなる。 クエリ変数名は任意で良いが、ここでは「M_CategoryQry」とする。

「datasource」属性にはColdFusion Administratorで登録したデータソース名「shopping」を入れる。最後にcfqueryタグ内にSQL文を記述し、M_Categoryテーブルの全件のデータを取得するクエリの記述は完了である。
同様に商品テーブル「M_Item」の全てのデータを取得するクエリは以下のようになる。
<!---M_Itemテーブル全件取得クエリ--->
<cfquery name="M_ItemQry" datasource="shopping">
  SELECT * FROM M_Item
</cfquery>
M_Itemテーブルの全てのデータを取得するクエリ
<b>カテゴリ全件一覧</b><br>
<cfoutput query="M_CategoryQry">
  #M_CategoryQry.CategoryID# #M_CategoryQry.CategoryName#<br>
</cfoutput>
M_Categoryの「CategoryID」と「CategoryName」を出力
まず、cfoutputタグのquery属性を用いて出力するクエリ変数名を定義する。出力するクエリ変数名は先ほどcfqueryで定義した「M_CategeoryQry」となる。cfoutputのquery属性を用いると、次の動作が行われる。
(1) ColdFusionは、データベースから返された行ごとに 1 回ずつcfoutputで囲まれたすべてのコードを繰り返し出力する。
(2) cfoutputで囲まれた特定のフィールド名を参照して、データをページに出力する。 特定のフィールド名とは「#」で囲まれたフィールド名「#フィールド名#」となる。

ColdFusionではフィールドの中の値をあらわす場合(変数も同様)、フィールド名を必ず「#」で囲み、「#接頭辞.フィールド名#」とする。(ここでの接頭辞は、クエリ変数名「M_Category」だが、接頭辞は省略可能)仮に「#」で囲まない場合、フィールド名自体が画面に表示されてしまうこととなる。よって、cfoutput内に「#M_Category.CategoryID#」、「#M_Category.CategoryName#」を記述し、間隔をあけるために間に半角スペースを入れて、最後に改行するようにbrタグを入れておこう。同様にM_Itemも記述する。
<br><b>商品全件一覧</b><br>
<cfoutput query="M_ItemQry">
  #M_ItemQry.ItemID# #M_ItemQry.ItemName#<br>
</cfoutput>
M_Itemの「ItemID」と「ItemName」を出力

これでカテゴリ、商品一覧の表示を行うコーディングは完了となる。それではブラウザで確認してみることにしよう。
アドレスに「http://localhost/shopping/samplelist.cfm」を入力し、右のような画面が表示されればOKである。
  モックアップに組み込もう!
    それでは第2回の最終目的であるECサイトおける商品一覧を作成しよう。
     
    トップ画面「index.cfm」、カテゴリ画面「category.cfm」の作成
     
    ●「index.cfm」を作成する
C:\Inetpub\wwwroot\shopping\index.cfmをColdFusionStudioで開く。
まず、「index.html」の1つ目の役割、「データベースに登録されたカテゴリを一覧表示する」であるが、これは既に前項にて説明済のため、先ほどのM_categoryQryを取得する記述を行えば完了である。
2つ目の役割「カテゴリ名称にはリンクを設ける。またこのリンクには どのカテゴリが選択され たかという情報も付加する」を考えていこう。

モックアップ画面では5つのカテゴリの記述があるが、cfoutputタグでクエリを繰り返し出力するわけであるから、繰り返す部分の記述は1つのみで良いということとなる。よって、「鉢植え」が記述されているtrタグ部分を残して「ツール」、「コンテナ」、「アクセサリ」、「ポット」部分は削除する。
「samplelist.cfm」と同じようにcfoutputタグを埋め込み、「鉢植え」と書かれている部分をクエリが出力できるように変更する。これでカテゴリ名の表示部分は完了だ。

次に、「どのカテゴリが選択されたか」という機能に関しては、URL変数を用いてカテゴリ画面は値を受け取る。カテゴリテーブルに登録された複数のカテゴリが一意になるのはPKである「CategoryID」なので、URL変数名は「CategoryID」としよう。するとリンクは以下のような記述となる。
category.cfm?CategoryID=#M_Category.CategoryID#
これでindex.cfmの記述は完成である。実際にブラウザで確認してみよう。

(1) 不要部分を取り除き、繰り返される部分を確認する
※ファイル名:index.html
 
<!--▼▼▼▼商品カテゴリ▼▼▼▼ー-->
<table border="0" cellpadding="3" cellspacing="0">
 <tr>
  <td><img src="common/image/spacer.gif" width="10" height="3" border="0" alt=""></td>
  <td><img src="common/image/spacer.gif" width="110" height="3" border="0" alt=""></td>
 </tr>
※この部分を繰り返す
 <tr>
  <td><img src="common/image/navi_icon.gif" width="10" height="9" border="0" alt=""></td>
  <td><a href="categoy.html" class="base">鉢植え</a></td>
 </tr>
</table>
<!--▲▲▲▲商品カテゴリ▲▲▲▲ー-->
(2) カテゴリ一覧出力部分完成
※ファイル名:index.cfm
 
<!--▼▼▼▼商品カテゴリ▼▼▼▼ー-->
<table border="0" cellpadding="3" cellspacing="0">
 <tr>
  <td><img src="common/image/spacer.gif" width="10" height="3" border="0" alt=""></td>
  <td><img src="common/image/spacer.gif" width="110" height="3" border="0" alt=""></td>
 </tr>
 <cfoutput query="M_CategoryQry">
 <tr>
  <td><img src="common/image/navi_icon.gif" width="10" height="9" border="0" alt=""></td>
  <td><a href="categoy.cfm?CategoryID=#M_CategoryQry.CategoryID#" class="base">#M_categoryQry.CategoryName#</a></td>
 </tr>
 </cfoutput>
</table>
<!--▲▲▲▲商品カテゴリ▲▲▲▲ー-->

BACK NEXT
PAGETOP
CLOSE