simpleCart(js) の合計のバグ修正


simpleCart(js)をWORDPRESSに突っ込んで
簡単なショッピングサイトを作成したりした時に気付いたバグ。
バグと言っていいのか分からないけれど
公式サイトのデモでも同じ現象が起るのでWORDPRESS特有のものという訳では無さそう。(Firefox 3 と IE7 で確認。)

その現象とはカートに複数のアイテムを追加している状態で、最初に追加したアイテムだけを削除したら、合計値が残ったアイテムの倍になる(カートの中のアイテム個数のカウントがオカシイ)というものなので、

620行あたりの
updateTotals関数で
item.remove();
実行後にbreak;を入れて対応。
Version は’2.0.1’。

this.updateTotals = function() {
this.total = 0 ;
this.quantity  = 0;
for( var current in this.items ){
var item = this.items[current];
if( item.quantity < 1 ){ 
item.remove();
break;
} else if( item.quantity !== null && item.quantity != "undefined" ){
this.quantity = parseInt(this.quantity,10) + parseInt(item.quantity,10); 
}
if( item.price ){ 
this.total = parseFloat(this.total) + parseInt(item.quantity,10)*parseFloat(item.price); 
}
}
this.shippingCost = this.shipping();
this.taxCost = parseFloat(this.total)*this.taxRate;
this.finalTotal = this.shippingCost + this.taxCost + this.total;
};

アイテムは一個ずつしか消さないからこれで大丈夫だと思う。多分。

とはいえ、初期の設定では個別にアイテムを消したり足したりする機能はオンになっていないのであんまり遭遇しないケースなのかな???

話は反れるけれど、公式サイトのデモがとってもオサレで素敵です。

あとWORDPRESSのテーマでも素敵なのが作られています。

SimpleCart(js), a Free WP E-commerce & Thematic Child Theme by Chris Wallace’s Blog

テーマ化する気力にまず拍手です。

私の場合は、simpleCart(js)単体でPAYPALで支払いが出来るようになっているんだけども、日本じゃあまりメジャーじゃないので別にフォームを追加してカスタマイズ(emailCheckout関数を作成)。

あ、あと、PAYPALのURLに行く時に日本語だと文字化けが起る(IEにて)のと、商品名に&とかあると困ったことになるので
URLを飛ばす処理のところでitem.nameへencodeURIComponentを追加。

itemsString = itemsString 	+ "&item_name_" 	+ counter + "=" + encodeURIComponent(item.name)  +

たぶん、こんなもんで良いと思います。。。

早く本家がバージョンアップしてくれると良いなあ。

参照:
simpleCart(js) – Javascript Shopping Cart by The Wojo Group
PHPとJSのURIエンコード比較
javascript: escape(), encodeURI(), encodeURIComponent() 比較 (groundwalker.com)

— 追記 2011.4.28

GitHubにプルリクエストで修正が上がっているので要チェック。

プルリクエスト — CyberShadowによる、thewojogroup’s simplecart-jsへの「Two fixes」 – GitHub

管理人さん、無反応なんだけど、やる気ないのかなあ。


この記事を書いた人