ショッピングカートクラス¶
カートクラスを使うと、ユーザがサイトを閲覧中に有効なセッションに、 商品を追加できます。 これらの商品は、カートから読みだすことができ、 ユーザが数量を変更したり、カートから商品を削除したりできる、よくある “ショッピングカート” の体裁に表示させることができます。
重要
カートライブラリは廃止され、使用すべきではありません。 現時点では、後方互換性のためだけに保持されます。
カートクラスは、”カート” のコアの機能「だけ」を提供するものであること に注意してください。出荷、クレジットカードの有効性確認やその他の処理 コンポーネントは提供しません。
カートクラスを使う¶
ショッピングカートクラスを初期化する¶
重要
カートクラスは、データベースに情報を保存するために CodeIgniter の セッション を利用しますので、 カートクラスを利用する前に、セッションの説明で示しているように、 データベーステーブルをセットアップする必要があります。 また、データベースを利用するために、application/config/config.php ファイルの セッション の設定項目を設定してください。
ショッピングカートクラスをコントローラのコンストラクタ で初期化するには、$this->load->library メソッドを利用します:
$this->load->library('cart');
ロードされると、カートオブジェクトが利用可能になります:
$this->cart
注釈
カートクラスは、セッションクラスを自動的に読み込んで初期化します。 アプリケーションの中で、セッションをまだどこでも使っていなかったとしても、 セッションクラスをロードする必要はありません。
カートに商品を追加する¶
ショッピングカートに商品を追加するには、 下記のように $this->cart->insert() メソッドに、商品情報の配列を 渡すだけです:
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
);
$this->cart->insert($data);
重要
上記の最初の4つのインデックス(id, qty, price, および name) は 必須 です. ひとつでも省略した場合は、データはカートに保存されません。 5番目のインデックス(options)は、任意の項目です。この項目は、その商品 に関連するオプションがある場合に使われるのを想定しています。上で示され ているように、options には、配列を使用してください。
5つの既定のインデックスは次のとおりです:
- id - 店舗の各商品は、一意識別子を持っている必要があります。 一般的には、”sku” や、その他の識別子になります。
- qty - 購入する数量。
- price - 商品の価格。
- name - 商品の名前。
- options - 商品を識別するために必要なその他のすべての属性。 これらは、配列として渡す必要があります。
上の5つのインデックスに加え、2つの予約語: rowid と subtotal があります。これらは、カートクラスの内部で使用されます。 そ れらの語をカートにデータを追加する際のインデックス名には使用 しないでください。
配列には、追加のデータを含むことができます。配列に追加したど んなデータも、セッションに保存されます。とはいえ、 表にした ときに情報を表示しやすいよう、すべての商品で使われるデータを 標準化するのが、一番良い方法です。
$data = array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'coupon' => 'XMAS-50OFF'
);
$this->cart->insert($data);
あなたが正常に挿入した場合、 insert() メソッドは、 単一の項目として$ROWIDを返します。
カートに複数の商品を追加する¶
下記に示したように、多次元配列を使うことによって、一度の アクションで複数の商品をカートに追加することができます。 これは、同じページの中で、複数の商品を選ばせたいときな どに有用です。
$data = array(
array(
'id' => 'sku_123ABC',
'qty' => 1,
'price' => 39.95,
'name' => 'T-Shirt',
'options' => array('Size' => 'L', 'Color' => 'Red')
),
array(
'id' => 'sku_567ZYX',
'qty' => 1,
'price' => 9.95,
'name' => 'Coffee Mug'
),
array(
'id' => 'sku_965QRS',
'qty' => 1,
'price' => 29.95,
'name' => 'Shot Glass'
)
);
$this->cart->insert($data);
カートを表示する¶
カートを表示するには、下のようなコードの ビューファイル を作成します。
この例では、フォームヘルパー を 利用しているのを注意してください。
<?php echo form_open('path/to/controller/update/method'); ?>
<table cellpadding="6" cellspacing="1" style="width:100%" border="0">
<tr>
<th>数量</th>
<th>商品説明</th>
<th style="text-align:right">価格</th>
<th style="text-align:right">小計</th>
</tr>
<?php $i = 1; ?>
<?php foreach ($this->cart->contents() as $items): ?>
<?php echo form_hidden($i.'[rowid]', $items['rowid']); ?>
<tr>
<td><?php echo form_input(array('name' => $i.'[qty]', 'value' => $items['qty'], 'maxlength' => '3', 'size' => '5')); ?></td>
<td>
<?php echo $items['name']; ?>
<?php if ($this->cart->has_options($items['rowid']) == TRUE): ?>
<p>
<?php foreach ($this->cart->product_options($items['rowid']) as $option_name => $option_value): ?>
<strong><?php echo $option_name; ?>:</strong> <?php echo $option_value; ?><br />
<?php endforeach; ?>
</p>
<?php endif; ?>
</td>
<td style="text-align:right"><?php echo $this->cart->format_number($items['price']); ?></td>
<td style="text-align:right">$<?php echo $this->cart->format_number($items['subtotal']); ?></td>
</tr>
<?php $i++; ?>
<?php endforeach; ?>
<tr>
<td colspan="2"> </td>
<td class="right"><strong>Total</strong></td>
<td class="right">$<?php echo $this->cart->format_number($this->cart->total()); ?></td>
</tr>
</table>
<p><?php echo form_submit('', 'カートを更新する'); ?></p>
カートを更新する¶
カートの情報を更新するには、Row ID と数量 を含む配列を $this->cart->update() メソッド に渡す必要があります
注釈
数量をゼロにセットした場合、その商品は、カートから 削除されます。
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
);
$this->cart->update($data);
// または、多次元配列
$data = array(
array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 3
),
array(
'rowid' => 'xw82g9q3r495893iajdh473990rikw23',
'qty' => 4
),
array(
'rowid' => 'fh4kdkkkaoe30njgoe92rkdkkobec333',
'qty' => 2
)
);
$this->cart->update($data);
また、以前に定義した任意のプロパティ、オプションとして価格やその他の カスタムフィールドとしてのアイテムを挿入し更新することができます。
$data = array(
'rowid' => 'b99ccdf16028f015540f341130b6d8ec',
'qty' => 1,
'price' => 49.95,
'coupon' => NULL
);
$this->cart->update($data);
Row ID とは?¶
row ID は、商品がカートに追加される際に、カートのコード で生成される一意識別子です。 一意識別子が生成される理由 は、異なるオプションを持つ同一の商品をカートで管理できる ようにするためです。
たとえば、ある人が、サイズが異なる以外は同じ、2つのTシャツ (同じ商品 ID)を購入するとするとします。 商品 ID(およびその他の属性) は、同一のシャツなので、2つのサイズのシャツは同じものです。違うのは サイズだけです。2つのサイズのシャツを別々に取り扱うことができるよう、 カートは、この違いを識別する方法を持っていなければなりません。カート は、一意の “row ID”を商品 ID と関連するオプションを元に生成すること で、違いを識別します。
ほとんどの場合、カートが更新されるのは、”カートの中身” のようなページで ユーザが操作する事によってなされますので、 開発者のように、 “row ID” の 事をいつも考慮しなければならないというようなことは、考えられません。 ですので、”カートの中身” のページにこの情報を隠しフォームフィールドで確 実に保管させ、 更新フォームが送信されたときに、それを確実に update メソッド に渡すようにしてください。より多くの情報を得るために、上の”カートの中身” のページの作成を試してみてください。
クラスリファレンス¶
- class CI_Cart¶
- $product_id_rules = '.a-z0-9_-'
デフォルトで、英数字、ダッシュ、アンダースコア、ピリオド - これらは、製品IDを検証するために使用する正規表現ルールです
- $product_name_rules = 'w -.:'
デフォルトで 英数字、ダッシュ、アンダースコア、コロン、ピリオド これらは、製品IDと製品名を検証するために使用する正規表現ルールです
- $product_name_safe = TRUE
唯一で安全な製品名を判定する。 デフォルトでTRUE。
- insert([$items = array()])¶
パラメータ: - $items (array) – カートに挿入する項目
返り値: 成功時 TRUE 失敗時 FALSE
返り値の型: bool
カートに項目を挿入しセッションテーブルに保存します。 成功時TRUE、失敗した場合FALSEを返します
- update([$items = array()])¶
パラメータ: - $items (array) – カートのアイテムを更新する
返り値: 成功時 TRUE、失敗時 FALSE
返り値の型: bool
このメソッドは、指定された項目のプロパティを変更することが可能です。 数量の変更を加える場合、通常チェックアウトの前に「カートを見る」ページ から呼び出されます。その配列は、各項目のROWIDが含まれている必要が あります。
- remove($rowid)¶
パラメータ: - $rowid (int) – アイテムのIDをショッピングカートから削除する
返り値: 成功時 TRUE、失敗時 FALSE
返り値の型: bool
$rowid を渡すことでショッピングカートからアイテムを削除すること ができます。
- total()¶
返り値: 合計金額 返り値の型: int カート内の合計金額が表示されます。
- total_items()¶
返り値: カート内のアイテムの合計額 返り値の型: int カート内のアイテムの合計数を表示します。
- contents([$newest_first = FALSE])¶
パラメータ: - $newest_first (bool) – Whether to order the array with newest items first
返り値: An array of cart contents
返り値の型: array
カート内のすべてのものを含む配列を返します。 あなたは返された配列、新から旧へまたは 旧から新へ並べ替え合格した内容の順序を 並べ替えることができます
- get_item($row_id)¶
パラメータ: - $row_id (int) – Row ID の所得
返り値: アイテムデータの配列
返り値の型: array
指定された行のIDと一致する項目の配列を含むデータを返し、 またはそのような項目が存在しない場合はFALSEを返します。
- has_options($row_id = '')¶
パラメータ: - $row_id (int) – Row ID の検査
返り値: オプションが存在する場合TRUE、それ以外の場合はFALSE
返り値の型: bool
カート内の特定の行がオプションが含まれている場合はTRUE(ブール値)を返します。 このメソッドは、rowid を渡す必要があるので、カートを表示する の例 で示すように、ループの中で、$this->cart->contents() と一緒に使われ るのを想定しています。
- product_options([$row_id = ''])¶
パラメータ: - $row_id (int) – Row ID
返り値: 製品のオプションの配列
返り値の型: array
特定の商品のオプションの配列を返します。このメソッドは、r owid を渡す必要があるので、カートを表示する の例で示すよう に、ループの中で、$this->cart->contents() と一緒に使われる のを想定しています。
- destroy()¶
返り値の型: void カートを破棄します。 このメソッドは、顧客の注文が完了した際などに呼ばれます。