 |
3) |
注文個数の変更 |
| |
|
|
| |
3)-1. |
商品管理番号と変更前の注文個数を保持する |
| |
|
ショッピングカートの内容を確認するために、クエリ「M_CartQry」を出力した。そのクエリを出力するcfoutputタグ内に、変数(ListItemID、
BeforeItemPeaces)を追加する。それらの変数に商品管理番号(M_CartQry.ItemID)と変更前の注文個数(M_CartQry.ItemPeaces)をセットする。
| cart.cfm 434行目、436行目 |
<input type="hidden"
name="ListItemID" value="#M_CartQry.ItemID#">
<input type="hidden" name="BeforeItemPeaces"
value="#M_CartQry.ItemPeaces#"> |
|
|
 |
| |
3)-2. |
変更前と変更後の注文個数の確認 |
| |
|
「変更する」ボタンをクリックすると、cart.cfmは、FORM変数(FORM.ListItemID、
FORM.BeforeItemPeaces)と、注文個数入力エリアの値(FORM.ItemPeaces)を受け取る。
複数の商品が注文されている場合、受け取ったFORM変数には、複数の商品情報がカンマ区切りでセットされている。これをリストと呼ぶ。まず、注文されている商品は何種類なのか、ListLen関数を使用しながら見てみよう。
ListLen関数
| 構文: |
ListLen(list) |
| 意味: |
listは任意のリスト。リスト内の要素の数 を返す。 |
商品の数を取得したら、その数だけ処理を繰り返す。処理を繰り返すにはcfloopタグを使用する。
cfloopタグ
| 構文: |
<cfloop from="開始値" to="終了値"
index="パラメータ名" step="ステップ値">
HTML および CFMLタグ
</cfloop> |
| 意味: |
(1)indexについて
必須項目である。
設定したパラメータ名でcfloopタグ間で値を参照出来る。
(2)fromについて
必須項目である。
インデックスの開始値である。
(3)toについて
必須項目である。
インデックスの終了値である。
(4)stepについて
オプションである。
既定値は1である。
ループが処理されるたびにループのindex値を加算する値を設定する。 |
| cart.cfm 62行目〜97行目 |
<cfloop from="1"
to="#ListLen(FORM.ListItemID)#" index="i">
</cfloop> |
|
次にその商品の変更前と変更後の注文個数を確認する。複数の商品の場合、一個ずつ商品を取り出して、注文個数を確認する。
一個ずつ商品を取り出すには、cfloopタグのインデックスをListGetAt関数のpositionに指定する。ListGetAt関数により返された値を変数を新たに作成し、セットする。
ListGetAt関数
| 構文: |
ListGetAt(list, position) |
| 意味: |
listは任意のリストである。positionの位置にある要素の値を返す。 |
| cart.cfm 64行目、67行目、70行目 |
<cfset ItemID=ListGetAt(#FORM.ListItemId#,#i#)>
<cfset Peace=ListGetAt(#FORM.ItemPeaces#,#i#)>
<cfset BeforePeace=ListGetAt(#FORM.BeforeItemPeaces#,#i#)> |
|
上記のようにcfsetタグを使用すれば、変数が作成され値をセットできる。 |
 |
| |
3)-3. |
ショッピングカート管理テーブル「T_Cart」の注文個数の変更 |
| |
|
上記の新たに作成された変数の、変更前注文個数(BeforePeace)と変更後注文個数(Peace)を比較する。変更されていたら、SQLのUPDATEを利用してデータベースの値を変更する。比較するためにはCompare関数を使用する。
Compare関数
| 構文: |
Compare(substring1, substring2) |
| 意味: |
substring1、 substring2は比較する文字列。substring1がsubstring2と等しい場合は
0 を返す。 |
| cart.cfm 85行目〜91行目 |
<cfif Compare(Peace,
BeforePeace) is not 0>
<cfquery name="UpdPeaces_CartQry" datasource="shopping">
UPDATE T_Cart set ItemPeaces = #Peace#
WHERE CartID = '#Cookie.CreateUUID#'
AND ItemID = #ItemID#
</cfquery>
</cfif> |
|
|
 |
| |
4) |
注文をキャンセルする |
| |
|
注文をキャンセルした場合、ショッピングカート、SQLのDELETE文を使用する。
cart.cfmは「削除」ボタンがクリックされたら、商品の商品管理番号(ItemID)をFORM変数「FORM. DelItemID」として受け取る。受け取ったFORM変数を削除する条件に指定する。
| cart.cfm 85行目〜91行目 |
<cfquery name="DeleteCartQry"
datasource="shopping">
DELETE FROM T_Cart
WHERE CartID = '#Cookie.CreateUUID#'
AND ItemID = #FORM.DelItemID#
</cfquery> |
|
|
 |
| |
5) |
購入手続へ |
| |
|
ショッピングカート画面は、「変更」ボタンや「削除」ボタンがクリックされたときに同じファイル(cart.cfm)に遷移するように指定している。「購入手続へ」ボタンがクリックされたときのみinput.cfmへ遷移するためには次のように記述する。
| cart.cfm 93行目〜95行目 |
<cfif 購入ボタンがクリックされたら>
<cflocation url="input.cfm" addtoken="No">
</cfif> |
|
(<cflocation url=“遷移先のファイル名" addtoken="No">) |