با سلام
من برای ساخت سبد خرید هیچ مشکلی ندارم به صورت عادی یک سشن ایجاد می کنم و کد محصول را در آن به عنوان کلید تعیین و می کنم و مقدار کلید را تعداد خرید تعیین می کنم
1- حالا مشکل من اینجاست که کالای من دارای رنگ و سایز هست یعنی کاربر هنگام خرید باید رنگ و سایز کالا را هم انتخاب کند این را چطور به این سشن اضافه کنم ؟
2- چطور رنگها را در بخش مدیریت و تعریف کالا با چک باکس انتخاب و در فیلد رنگ یا سایز جدول محصولات اضافه کنم و در نمایش کالا به صورت رادیو نشون بدم؟
1- توی هر عنصر سشن شما میتونین هر چیزی ذخیره کنین. مثلاً یک آرایه که شامل تعداد و رنگ و سایز هست. مثال:
$cart = Yii::$app->session->get('cart');
$cart[] = ['id' => 5, 'qty' => 1, 'color' => 'blue', 'size' => 'large'];
Yii::$app->session->set('cart', $cart);
2- یک جدول باید برای رنگها و سایزها داشته باشین و هر رنگی که در سیستم تعریف میکنین، توی این جدول بگذارین. بعد یک جدول واسط تعریف کنید برای ارتباط بین رنگها و محصولات. اگه یه محصول 5 رنگ داشته باشه، باید 5 رکورد در این جدول ثبت بشه که در همهی این رکوردها، id محصول ثابت و id رنگ متغیره. موقع نمایش محصول به مشتری هم تمام رنگهایی که توی این جدول واسط هستن و با id محصول ارتباط دارن رو بصورت radio نمایش بدین. باید از ارتباط «چند به چند» استفاده کنید.
انجام دادم دست درد نکنه
ولی الان مشکلی که دارم من به شکل زیر اینها را تعریف کردم و صفحه خطا میده
<h5>رنگ بندی :
<?php foreach(ProdColors::find()->where(['productID' => $product->id])->all() as $color) : ?>
<input type="radio" name="colors" value="<?= $color->colorID ?>" /> <?= $color->color->name ?>
<?php endforeach; ?>
</h5>
خب حالا من می خوام به سبد خرید اضافه کنم خطا میده
<?= Html::a('<i class="fa fa-cart-plus fa-lg"></i> افزودن به سبد خرید', ['/cart/add', 'id' => $product->id, 'color' => $_GET['colors'], 'size' => $_GET['sizes']], ['class' => 'btn btn-success pull-left']) ?>
کلاس اضافه و حذف کردن به شکل زیر بود حالا چطور با این شرایط تغییرش بدم
<?php
namespace appcontrollers;
use Yii;
use appcomponentsMyController;
use yiiwebHttpException;
use yiihelpersUrl;
use appmodelsProducts;
use appmodelsOrders;
use appmodelsOrderdata;
Class CartController extends MyController
{
public function actionAdd($id,$color,$size)
{
$this->loadModel($id);
$cart = Yii::$app->session->get('cart');
if(!isset($cart['id']) == $id){
$cart[] = ['id' => $id, 'qty' => 1, 'color' => $color, 'size' => $size];
} else {
$cart[] = ['id' => $id, 'qty' => 2, 'color' => $color, 'size' => $size];
}
Yii::$app->session->set('cart', $cart);
$this->goBack();
}
public function actionPlus($id)
{
$this->loadModel($id);
$cart = Yii::$app->session->get('cart');
$cart['id']['qty']++;
Yii::$app->session->set('cart', $cart);
$this->goBack();
}
public function actionSub($id)
{
$this->loadModel($id);
$cart = Yii::$app->session->get('cart');
if(isset($cart[$id])){
$cart[$id]--;
if($cart[$id] <= 0){
unset($cart[$id]);
}
Yii::$app->session->set('cart', $cart);
}
$this->goBack();
}
public function actionRemove($id)
{
$this->loadModel($id);
$cart = Yii::$app->session->get('cart');
if(isset($cart['id'])){
unset($cart[$id]);
Yii::$app->session->set('cart', $cart);
}
$this->goBack();
}
public function actionClear()
{
Yii::$app->session->set('cart', []);
$this->goHome();
}
public function actionSave()
{
$carts = Yii::$app->session->get('cart');
if(empty($carts)){
$this->goHome();
}
$total = 0;
foreach($carts as $cart){
if($model = $this->loadModel($cart['id'])){
$total += $model->price * $cart['qty'];
}
}
$total += 70000;
$order = new Orders();
$order->userID = Yii::$app->user->id;
$order->totals = $total;
$order->ts = time();
$order->confirm = 0;
if($order->save()){
foreach ($carts as $cart){
if($model = $this->loadModel($cart['id'])){
$orderData = new Orderdata();
$orderData->orderID = $order->id;
$orderData->productID = $id;
$orderData->quntity = $cart['qty'];
$orderData->colorID = $cart['color'];
$orderData->sizeID = $cart['size'];
$orderData->save();
}
}
}
Yii::$app->session->set('cart', []);
return $this->redirect(['/members/index']);
}
public function actionView()
{
$cart = Yii::$app->session->get('cart');
if(empty($cart)){
$this->goHome();
}
Yii::$app->user->returnUrl = Url::to();
return $this->render('view', compact('cart'));
}
private function loadModel($id)
{
$model = Products::findOne(['id' => $id, 'confirm' => 1]);
if(!$model || !$model->category->confirm)
{
throw new HttpException(404, 'محصول مورد نظر یافت نشد');
}
return $model;
}
}
دوستان کسی نیست راهنمایی کنه؟