رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سبد خرید در yii2
#1
با سلام 
من برای ساخت سبد خرید هیچ مشکلی ندارم به صورت عادی یک سشن ایجاد می کنم و کد محصول را در آن به عنوان کلید تعیین و می کنم و مقدار کلید را تعداد خرید تعیین می کنم 
1- حالا مشکل من اینجاست که کالای من دارای رنگ و سایز هست یعنی کاربر هنگام خرید باید رنگ و سایز کالا را هم انتخاب کند این را چطور به این سشن اضافه کنم ؟
2- چطور رنگها را در بخش مدیریت و تعریف کالا با چک باکس انتخاب و در فیلد رنگ یا سایز جدول محصولات اضافه کنم و در نمایش کالا به صورت رادیو نشون بدم؟
پاسخ
تشکر شده توسط:
#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 نمایش بدین. باید از ارتباط «چند به چند» استفاده کنید.
پاسخ
تشکر شده توسط:
#3
انجام دادم دست درد نکنه
ولی الان مشکلی که دارم من به شکل زیر اینها را تعریف کردم و صفحه خطا میده
<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']) ?>
پاسخ
تشکر شده توسط:
#4
کلاس اضافه و حذف کردن به شکل زیر بود حالا چطور با این شرایط تغییرش بدم

<?php
namespace app\controllers;

use Yii;
use app\components\MyController;
use yii\web\HttpException;
use yii\helpers\Url;
use app\models\Products;
use app\models\Orders;
use app\models\Orderdata;

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;
    }
}
پاسخ
تشکر شده توسط:
#5
دوستان کسی نیست راهنمایی کنه؟
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان