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

2. 商品詳細情報画面からショッピングカート画面へ
  画面上の動きやデータベースの内容を確認できたら、次に処理の流れとコーディング方法を学んでいこう。商品をショッピングカートへ入れるところから説明を行なう。
     
  1) cart.cfmは「ショッピングカートを見る」と「ショッピングカートに入れる」から遷移してくる
    ショッピングカート管理画面のcart.cfmは、「ショッピングカートを見る」ボタンをクリックした場合と、「ショッピングカートに入れる」ボタンをクリックした場合の2通りの方法により遷移してくる。「ショッピングカートに入れる」場合には、商品管理番号(ItemID)のURL変数を受け取るので、そのURL変数が存在するかしないかで「ショッピングカートを見る」場合と処理を分けることができる。
cfifタグとIsDefined関数を使用してURL変数の商品管理番号(URL.ItemID)を受け取ったかどうかを判定してみる。
cart.cfm 85行目〜91行目
<cfif IsDefined("URL.ItemID")>
 1.ショッピングユーザーの特定
 2.ショッピングカートにすでに同じ商品が入っているかを確認
  2-1.ショッピングカートにすでに同じ商品が入っている場合
  2-2.ショッピングカートに同じ商品が入っていない場合
</cfif>
上記のcfifタグ内の処理を確認する。
スクリーン
  1)-1. ショッピングしているユーザーの特定
    ショッピングカートを実現するためには、現在ショッピングしているユーザーを特定する必要がある。そのため、ショッピングカートを利用する際にユーザー固有のIDを割り当てることにする。ユニークなIDを割り当てる必要があるため今回はCreateUUID()関数を使用する。 得られた値をクッキーにセットし、クッキーにセットされたユニークな番号でユーザーを特定する。
クッキーに値をセットするには、cfcookieタグを使用する。すでにクッキーに値がセットされていれば、もう一度セットする必要はないので、処理を省く。
cart.cfm 16行目〜18行目
<cfif Cookie.CreateUUID is "">
 <cfcookie name="CreateUUID" value="#CreateUUID()#">
</cfif>

cart.cfmはdetail.cfmからURL変数の商品管理番号「URL.ItemID」を受け取る。受け取ったURL変数と、クッキーの値をSQLの条件に指定して、ショッピングカート内容を取得するクエリを記述する。
cart.cfm 21行目〜25行目
<cfquery name="Select_T_Cart" datasource="shopping">
 SELECT * FROM T_Cart
 WHERE CartID = '#Cookie.CreateUUID#'
 AND ItemID = #URL.ItemID#
</cfquery>
  1)-2. 同じ商品がすでにショッピングカートに入っているか?
    前回、検索処理において何件検索されたのかという情報のために、RecordCountという変数を使用すると説明した。その変数を利用して、ショッピングカートの情報を取得するクエリの検索結果が0件の場合は、ショッピングカートに登録し、1件以上であれば商品の個数を追加してみよう。
  1)-3. ショッピングカート管理テーブルのレコードを更新する
    ショッピングカート管理テーブルの注文個数を1個追加するためのSQL文は次の通りである。
UPDATE T_Cart SET ItemPeaces = ItemPeaces + 1 
WHERE CartID = ‘#Cookie.CreateUUID# 
AND ItemID = #URL.ItemID#

T_Cartテーブルに登録されているデータすべてが更新されてまわないように、条件式でURL変数とクッキー変数を指定して、現在ショッピングをしているユーザのデータのみを更新するようにしている。
  1)-4. ショッピングカート管理テーブルにレコードを追加する
    ショッピングカート管理テーブルに新規データを追加するためのSQL文は次の通りである。
INSERT INTO T_Cart VALUES('#Cookie.CreateUUID#',#URL.ItemID#,1)

上記のSQL文により「T_Cart」テーブルに1レコードを追加できる。フィールド(CartID,ItemID,ItemPeaces)に挿入される値がそれぞれ(‘#Cookie.CreateUUID#’,#URL.ItemID#,1)になる。

以上のポイントをまとめると次のようになる。
cart.cfm 28行目〜39行目
<cfif Select_T_Cart.RecordCount gt 0>
 <cfquery name="AddPeaces_T_Cart" datasource="shopping">
  UPDATE T_Cart set ItemPeaces = ItemPeaces + 1
  WHERE CartID = '#Cookie.CreateUUID#'
  AND ItemID = #URL.ItemID#
 </cfquery>
<cfelse>
 <cfquery name="AddItem_T_Cart" datasource="shopping">
  INSERT INTO T_Cart VALUES('#Cookie.CreateUUID#',#URL.ItemID#,1)
 </cfquery>
</cfif>

BACK NEXT
PAGETOP
CLOSE