简体   繁体   English

如何在购物车中添加产品说明

[英]How to add instruction with product in Cart

This is a fully working Cart.这是一个功能齐全的购物车。 It can add products and calculate the quantity and total price.它可以添加产品并计算数量和总价。 but I want to take instructions from User and add it with the Products in Cart.但我想从用户那里获取说明并将其添加到购物车中的产品中。

This is the body from where I am adding product to Cart.这是我将产品添加到购物车的主体。

<form action="{{ route('product.addToCart') }}">
   @csrf
   <input hidden name="products_id" id="products_id">   // It contains the product id
   <input name="instructions" id="instructions">       // Section from where I need to send instructions with each product
   <button type="submit" class="btn theme-btn">Add to cart</button>
</form>

This is the Controller:这是控制器:

public function getAddToCart(Request $request)
{
    $products = Products::find($request->products_id);
    $instructions = $request->input('instructions');
    $oldCart = Session::has('cart') ? Session::get('cart') : null;
    $cart = new Cart($oldCart);
    $cart->add($products, $products->id, $instructions); // It is sending Product and it's Id in Cart Model

    $request->session()->put('cart', $cart);

    $oldCart = Session::get('cart');
    $cart = new Cart($oldCart);
    return redirect('/');
}

This is the Cart Modal:这是购物车模式:

public function add($item, $id, $instructions) {
    $storedItem = ['qty' => 0, 'price' => $item->price, 'instructions' => $instructions, 'item' => $item];
    if ($this->items) {
        if (array_key_exists($id, $this->items)) {
            $storedItem = $this->items[$id];
        }
    }
    $storedItem['qty']++;
    $storedItem['price'] = $item->price * $storedItem['qty'];
    $storedItem['instructions'];
    $this->items[$id] = $storedItem;
    $this->totalQty++;
    $this->totalPrice += $item->price;
}

First save the instruction in a variable inside the controller function:首先将指令保存在控制器函数内的变量中:

$instructions = $request->input('instructions');

Now send it to the Cart Modal:现在将其发送到购物车模态:

$cart->add($products, $products->id, $instructions);

Controller function would be like this:控制器功能是这样的:

public function getAddToCart(Request $request)
{
    $products = Products::find($request->products_id);
    $instructions = $request->input('instructions');
    $oldCart = Session::has('cart') ? Session::get('cart') : null;
    $cart = new Cart($oldCart);
    $cart->add($products, $products->id, $instructions);

    $request->session()->put('cart', $cart);

    $oldCart = Session::get('cart');
    $cart = new Cart($oldCart);
    return redirect('/');
}

Now in the Modal get the $instruction variable and save it in the Cart:现在在 Modal 中获取 $instruction 变量并将其保存在购物车中:

public function add($item, $id, $instructions) {
    $storedItem = ['qty' => 0, 'price' => $item->price, 'instructions' => $instructions, 'item' => $item];
    if ($this->items) {
        if (array_key_exists($id, $this->items)) {
            $storedItem = $this->items[$id];
        }
    }
    $storedItem['qty']++;
    $storedItem['price'] = $item->price * $storedItem['qty'];
    $storedItem['instructions'] = $instructions;
    $this->items[$id] = $storedItem;
    $this->totalQty++;
    $this->totalPrice += $item->price;
}

Note: Only one instruction will be saved with product array.注意:只有一条指令将与产品阵列一起保存。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM