SOY CMS / SOY Shop

ブログトップ

CartLogicで保持する商品情報

2014年04月18日

前回はCartLogicのプロパティを見ました。

今回から詳細を見ていきますが、最初にカートに入れた商品のデータの持ち方について見ていきます。

CartLogicの各種プロパティ





カートに入れた商品の各データを確認する場合、


//カートロジックを取得
$cart = CartLogic->getCart();
$items = $cart->getItems();

CartLogicのgetItemsで取得できます。

ここから各商品のデータを確認してみると、


object(SOYShop_ItemOrder)#88 (11) {
    ["id":"SOYShop_ItemOrder":private]=>
    NULL
    ["orderId":"SOYShop_ItemOrder":private]=>
    NULL
    ["itemId":"SOYShop_ItemOrder":private]=>
    string(1) "5"
    ["itemCount":"SOYShop_ItemOrder":private]=>
    int(3)
    ["itemPrice":"SOYShop_ItemOrder":private]=>
    int(2100)
    ["totalPrice":"SOYShop_ItemOrder":private]=>
    int(6300)
    ["itemName":"SOYShop_ItemOrder":private]=>
    string(42) "アートフラワー置きものセット"
    ["cdate":"SOYShop_ItemOrder":private]=>
    NULL
    ["isSended":"SOYShop_ItemOrder":private]=>
    int(0)
    ["attributes":"SOYShop_ItemOrder":private]=>
    NULL
    ["isAddition":"SOYShop_ItemOrder":private]=>
    NULL
  }

SOYShop_ItemOrderオブジェクトで入っており、

商品IDや商品名といったカートで確認できる最低限の商品情報と

購入の際に必要な数量と合計金額、商品オプション(attribute)の有無や加算オプション(isAddition)の有無の情報を保持しています。

orderIdのようなnullな値は注文完了時の注文IDが決定してから挿入されます。

(/soyshop/webapp/src/domain/order/SOYShop_ItemOrder.class.php)




カートの中で各商品の商品コードがほしいということがたまにあります。


こんな時は面倒ですが、


//わかりやすいように$itemOrders変数にカートに入っている商品情報を入れる
$itemOrders = $cart->getItems();

//$items変数の初期化
$items = array();//$items変数の初期化

//SOYShop_ItemDAOの呼び出し
$itemDao = SOY2DAOFactory::create("shop.SOYShop_ItemDAO");
foreach($itemOrders as $itemOrder){

	//商品IDを取得する
	$itemId = $itemOrder->getItemId();

	try{
		$item = $itemDao->getById($itemId);
	}catch(Exception $e){
		$item = new SOYShop_Item();
	}
	
	//商品データ格納用の配列に値を放り込む
	$items[] = $Item;
}

途中で$itemの値を確認してみると


object(SOYShop_Item)#106 (20) {
  ["id":"SOYShop_Item":private]=>
  string(1) "5"
  ["name":"SOYShop_Item":private]=>
  string(42) "アートフラワー置きものセット"
  ["alias":"SOYShop_Item":private]=>
  string(14) "goods-001.html"
  ["code":"SOYShop_Item":private]=>
  string(9) "goods-001"
  ["saleFlag":"SOYShop_Item":private]=>
  string(1) "0"
  ["price":"SOYShop_Item":private]=>
  string(4) "2100"
  ["salePrice":"SOYShop_Item":private]=>
  string(4) "2100"
  ["sellingPrice":"SOYShop_Item":private]=>
  string(4) "2100"
  ["stock":"SOYShop_Item":private]=>
  string(1) "3"
  ["config":"SOYShop_Item":private]=>
  string(222) "{省略}"
  ["_config":"SOYShop_Item":private]=>
  NULL
  ["category":"SOYShop_Item":private]=>
  string(1) "2"
  ["type":"SOYShop_Item":private]=>
  string(6) "single"
  ["createDate":"SOYShop_Item":private]=>
  string(10) "1396568164"
  ["updateDate":"SOYShop_Item":private]=>
  string(10) "1397562203"
  ["openPeriodStart":"SOYShop_Item":private]=>
  string(1) "0"
  ["openPeriodEnd":"SOYShop_Item":private]=>
  string(10) "2147483647"
  ["detailPageId":"SOYShop_Item":private]=>
  string(1) "3"
  ["isOpen":"SOYShop_Item":private]=>
  string(1) "1"
  ["isDisabled":"SOYShop_Item":private]=>
  string(1) "0"
}

SOYShop_Itemオブジェクトの形で取得でき、商品コードや在庫数といった詳細情報を取得できました。


//わかりやすいように$itemOrders変数にカートに入っている商品情報を入れる
$itemOrders = $cart->getItems();

//$items変数の初期化
$items = array();//$items変数の初期化

//SOYShop_ItemAttributeDAOの呼び出し
$attributeDao = SOY2DAOFactory::create("shop.SOYShop_ItemAttributeDAO");
foreach($itemOrders as $itemOrder){

	//商品IDを取得する
	$itemId = $itemOrder->getItemId();

	try{
		$attributes = $attributeDao->getByItemId($itemId);
	}catch(Exception $e){
		$attributes = array();
	}

	//取得したデータを確認する
	var_dump($attributes);
}

SOYShop_ItemAttributeDAOで値を取得してみると、


array(3) {
  ["item_copy1"]=>
  object(SOYShop_ItemAttribute)#138 (3) {
    ["itemId":"SOYShop_ItemAttribute":private]=>
    string(1) "5"
    ["fieldId":"SOYShop_ItemAttribute":private]=>
    string(10) "item_copy1"
    ["value":"SOYShop_ItemAttribute":private]=>
    string(78) "アートフラワーをお部屋の飾りにひとつ、いかがですか?"
  }
  ["item_copy2"]=>
  object(SOYShop_ItemAttribute)#11 (3) {
    ["itemId":"SOYShop_ItemAttribute":private]=>
    string(1) "5"
    ["fieldId":"SOYShop_ItemAttribute":private]=>
    string(10) "item_copy2"
    ["value":"SOYShop_ItemAttribute":private]=>
    string(0) ""
  }
  ["item_copy3"]=>
  object(SOYShop_ItemAttribute)#64 (3) {
    ["itemId":"SOYShop_ItemAttribute":private]=>
    string(1) "5"
    ["fieldId":"SOYShop_ItemAttribute":private]=>
    string(10) "item_copy3"
    ["value":"SOYShop_ItemAttribute":private]=>
    string(0) ""
  }
}

カスタムフィールドで設定した値が取得できます。


取得したいカスタムフィールドのフィールドIDを把握している場合は、


$attribute = $attributeDao->get($itemId, "item_copy1");

のように商品IDとフィールドIDでオブジェクトを取得できます。

詳しくは各種DAOクラスファイルをご覧ください。

SOY App開発の説明 SOY2DAOでデータベースを利用する1

(/soyshop/webapp/src/domain/以下のファイル)