0

カートを使用したシンプルな Web アプリの作成に成功しました。

今、私はいくつかの特別オファーを実装する必要があります.

例 1: 顧客がある製品を 2 つ追加した場合 - 2 つ目の製品は 30% 安くなるはずです。

例 2: 顧客が product_1 と product_2 を追加した場合、製品 3 を無料で追加する必要があります。

ビジネスロジック自体の実装は問題ありません。

問題は、Codeigniter Cart に製品の詳細情報がないことです。

項目オブジェクト/配列には、、、、、idおよびnameフィールドがありqtyます。pricesubtotaloptions

カートの変更ごとにデータベースにクエリを実行せずに価格を再計算するには、その製品に適用される特別オファーを示すグループ/カテゴリなどの追加フィールドが必要です。

さらに、顧客がカートから製品を削除すると、そこに古い価格を設定する必要があるため、基本価格をどこかに保存する必要があります。

その追加情報をどこに置くべきですか?

optionsフィールドはすでに使用されています...

カートの更新ごとにデータベースにクエリを実行したくありません (Web アプリケーションを非常に高速にし、サーバーの負荷を最小限に抑えたい)。

rowidカート項目の価格を変更すると、これらの問題が発生する可能性がありますか?

idカートの一意の「rowid」はアイテムとoptions配列のmd5チェックサムであるため、これについて質問しています。私のアプリケーションでは、同じ製品に同じオプションの異なる価格を使用します (たとえば、1 個の通常価格、別の 70% 価格)。

4

2 に答える 2

1

Codeigniter カートを使用すると開始できますが、あらゆる種類のカスタマイズについては、独自のカートを作成することをお勧めします。カートがしなければならないことは、製品 ID と数量を保存することだけです。それでおしまい。他のすべては、カートの表示と注文の作成を目的としています。注文の合計はカートとは別に表示されます。これは、ほとんどの注文で配送料や税金などの他の料金が発生するためです。および/または最終価格を変更するプロモーションがある場合があります。

そのため、表示しやすくするために、カートに製品名を含めることを決定する場合があります。そして、船の重量を保管することは合理的です。しかし、価格をカートに保存するだけでも危険です。買い物客が買い物をしている間に価格が上がったり下がったりしたらどうなるでしょうか? これらは特殊なケースかもしれませんが、カート内の情報がいかに「古くなる」かを示しています。

あなたが引用した例は、非常にすぐにわかるので素晴らしいです-カートは一度に1つの品目を追跡するように構築されています. どんな種類のロジックでも - これらを 3 つ購入すると、3 つ目は無料で入手できます - そのようなロジックをカートに組み込むことはできますが、すぐに厄介なスパゲッティになってしまいます!

じゃあ何をすればいいの?カート オブジェクトを (カートのアイテムと共に) 取得し、それをプロモーション モデルに渡します。プロモーション モデルは、カート内のすべてのアイテムをループし、調整を行います。これが注文メソッドに渡されます。プロモーション モデルを使用することで、プロモーションのビジネス ルールをカートから分離しています。最も重要なこと

カートの中は何も変更していません。

カート内のアイテムにプロモーションを適用しています。元のカートの価格を書き直そうとしていないので、はるかに柔軟で、節約した金額を簡単に示すことができます。

于 2012-12-09T20:27:48.193 に答える
0

options私は、それが配列の配列である可能性があり、そこに追加のデータを格納できることに気付きました。

その配列を使用しますが、標準の Cart ライブラリを拡張する必要はないと思います。

于 2012-12-09T09:14:36.943 に答える