public function actionAdd() { $item_id = (int) Yii::$app->request->post('item_id'); $qty = (int) Yii::$app->request->post('qty'); $data = Yii::$app->request->post('data'); $props = Yii::$app->request->post('props'); if ($props) { $tmp = explode(';', $props); $props = []; foreach ($tmp as $v) { $a = explode(':', $v); $props[$a[0]] = $v; } $sku = Sku::find()->where(['item_id' => $item_id, 'props' => Json::encode($props)])->one(); $sku_id = $sku->sku_id; } $shoppingCartModel = new ShoppingCart(); if ($shoppingCartModel->add($sku_id, $qty, $data)) { return Json::encode(['message' => \Yii::t('app', 'add to cart success')]); } else { return Json::encode(['message' => \Yii::t('app', 'add to cart fail')]); } }
/** * @param $event CartEvent */ public function validate($event) { //@TODO need to move to cart model the have error message $sku = Sku::find()->where($event->item_id)->one(); if (!$sku) { $event->isValid = false; return; } $item = Item::find()->where($sku->item_id)->one(); if (!$item || intval($event->qty) != $event->qty) { $event->isValid = false; return; } if ($event->qty <= 0) { $event->isValid = false; return; } }
public function saveSkus($item_id, $skus) { if (is_array($skus) && count($skus)) { $skuArray = array(); foreach ($skus as $i => $sku) { if (isset($sku['sku_id']) && $sku['sku_id']) { $skuModel = Sku::find()->where(['sku_id' => $sku['sku_id']])->one(); } else { $skuModel = new Sku(); } $skuModel->item_id = $item_id; $skuModel->props = $sku['props']; $skuModel->props_name = $sku['props_name']; $skuModel->quantity = $sku['stock']; $skuModel->price = $sku['price']; $skuModel->outer_id = $sku['outer_id']; if (isset($sku['sku_id']) && $sku['sku_id']) { if ($skuModel->update() === false) { Yii::$app->session->setFlash('sku-error', Yii::t('catalog', 'Every sku must have a value !')); $this->addError('props', Yii::t('catalog', null)); } } else { if (!$skuModel->save()) { Yii::$app->session->setFlash('sku-error', Yii::t('catalog', 'Every sku must have a value !')); $this->addError('props', Yii::t('catalog', null)); } } $skuArray[$i] = $skuModel->sku_id; } //删除 $models = Sku::findAll(['item_id' => $item_id]); $delArr = array(); foreach ($models as $k1 => $v1) { if (!in_array($v1->sku_id, $skuArray)) { $delArr[] = $v1->sku_id; } } if (count($delArr)) { Sku::deleteAll('sku_id IN (' . implode(', ', $delArr) . ')'); } } else { //已经没有SKU了,要清除数据表内容 Sku::deleteAll(['item_id' => $item_id]); } }