2011.03.24 あるみ
おつかれさまです、alumini_alumiです。
ECサイトでは、ロット単位で購入させたいという要件も結構あるかと思います。
具体的な例ですと、
『1袋30本入のうま○棒を3袋買った場合、お客様の元に何本届くかをお伝えしたい』
の、何本届くかを実装したいというものです。
※EC-CUBEのデフォルトでは、入数のような概念はないのでカスタマイズせねばなりません。
ECサイトの簡単な購入までの遷移を考えると、ロット数を表示・実装する箇所はたくさん出てきてしまいました。
今回でいうと、「商品」と「カート」と「決済」と「メール」の表記や、ロジックを改修することが想定されます。
が!
今回のCMSの場合、カートの内容はセッションに保持されているので、ロット数という概念をどこで拾うかによって
改修範囲もレベルも変わってきます。
カート周りは不勉強なので細かなことは省きますが、ECサイトはモノが買えることが一番の肝なので
カート周りを勉強することはそのCMSをとても良く知る必要があり、そしてとても大変だということが理解できました。
肝の部分まで触らざるをえないので、できれば(ニーズも多いと思うし)デフォルトの機能で実装されないかな、と思ってます。
よく知る、という部分をもう一個だけ書きたいと思います。
同CMSの商品周りについてです。
商品マスタに前準備なしにカラムを追加すると、とたんにエラーでサイトが動かなくなってしまいます。
というか、動かなくなってしまって焦りました。
ポイントはviewテーブルでした。
元々EC-CUBEはPostgreSQLで作ったものに、if文豊かにMySQLが入っているように見えます。
具体的なソースコードやファイル名は載せませんが、
「商品マスタのSELECT文呼ばれたら、viewテーブルを参照する」関数の中で
「ただし、MySQLではviewは使われていないので、ここでSELECT文つくり直して、本当の商品マスタ参照する」
となってました。
MySQLとしか仲良くしたことがないレベルの私には、viewテーブルの考えがなくて、30分位涙目になりながら
動くように改修できました。
※対応方法としては、「ここでSELECT文つくり直して」の部分にカラム名を追記する程度でした。
所感ですが、「なんで関数の中でSELECT文作り直した」と作った方に聞きたいです。
人の作ったモノ、作りたいものには意味があると思うので、その意味を汲みとった実装を行いたいと思います。