Я пользуюсь Laravel и пакетом Moltin laravel-cart, и у меня есть вопрос о том, все ли это хорошо работает, но когда я добавляю более одного товара, корзина обновляется, но не показывает товар.
У меня есть следующее, что добавляет в корзину:
{{ Form::open(['route' => 'cart']) }}
<input type="hidden" name="path" value="{{ Request::path() }}">
<input type="hidden" name="image" value="{{ $item->image }}">
<input type="hidden" name="product" value="{{ $item->name }}">
<input type="hidden" name="description" value="{{ $item->seo_description }}">
<input type="hidden" name="qty" value="1">
<input type="hidden" name="size" value="{{ Session::get('size') }}">
<input type="hidden" name="colour" value="{{ Session::get('colour') }}">
<input type="hidden" name="price" value="{{ $item->price }}">
@if ($item->stock > 0)
<button class="btn btn-success">Add to Bag</button>
@else
<a href="" class="btn btn-primary">Email us</a>
@endif
{{ Form::close() }}
Тогда у меня есть это, которое показывает предметы тележек.
@foreach($items as $item)
<tr>
<td class="col-sm-8 col-md-6">
<div class="media">
<span class="thumbnail pull-left">
<img class="media-object" src="/uploads/product-images/{{$item->image}}" style="width: 72px; height: 72px;">
</span>
<div class="media-body">
<h4 class="media-heading">
<a href="{{ $item->path }}">{{ $item->name }}</a>
</h4>
<span>Status: </span><span class="text-success"><strong>In Stock</strong></span>
</div>
</div>
</td>
<td class="col-sm-1 col-md-1" style="text-align: center">
<input type="email" class="form-control" id="exampleInputEmail1" value="1">
</td>
<td class="col-sm-1 col-md-1 text-center"><strong>£{{ $item->price }}</strong></td>
<td class="col-sm-1 col-md-1">
</td>
</tr>
@endforeach
<tr>
<td></td>
<td></td>
<td></td>
<td><h5>Subtotal</h5></td>
<td class="text-right"><h5><strong>£{{ $item->price }}</strong></h5></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td><h3>Total</h3></td>
<td class="text-right"><h3><strong>£{{ Cart::total(false) }}</strong></h3></td>
</tr>
<tr>
<td></td>
<td></td>
<td>
<a href="/remove/{{ $item->identifier }}" class="btn btn-danger">
<span class="glyphicon glyphicon-remove"></span> Remove
</a>
</td>
<td>
<a href="" class="btn btn-default">
<span class="glyphicon glyphicon-shopping-cart"></span> Continue Shopping
</a>
</td>
<td>
<a href="/checkout" class="btn btn-success">
Checkout <span class="glyphicon glyphicon-play"></span>
</a>
</td>
</tr>
Но, как я уже сказал, он показывает только одну вещь, но все же сумма в £ правильная.
Я думаю, что вы забыли правильно указать количество для каждого товара. У вас есть линия, которая совершенно неуместна внутри вашего @foreach
:
<input type="email" class="form-control" id="exampleInputEmail1" value="1">
Я думаю, что это должно быть:
<input type="text" class="form-control" value="{{ $item->qty }}">
Cart::insert()
не увеличивает количество, оно просто добавляет товар в корзину и заменяет количество указанным. Вам нужно проверить, есть ли товар в корзине при добавлении и обновить количество соответственно. Для этого каждый элемент, добавленный в корзину, должен иметь уникальный идентификатор (пока я вижу, что вы устанавливаете 1
в качестве идентификатора, который не будет работать, потому что корзина использует идентификатор для различения разных товаров. Итак, ваш код должен выглядеть примерно так:
public function add() {
$input = Input::all();
// Pass the product ID with the request parameters
$id = $input['id'];
// Try to get the cart item by ID
$item = Cart::item($id)
// If the result if false then the items was not found
// in the cart and you need to create a new entry
if ($item === false)
{
$product = array(
'id' => $id,
'name' => $input['product'],
'price' => $input['price'],
'colour' => $input['colour'],
'quantity' => $input['qty'],
'image' => $input['image'],
'path' => $input['path'],
'description' => $input['description']
);
}
else
{
// If it was found you just need to update the quantity
$item->quantity += (int) $input['qty'];
$product = $item;
}
Cart::insert($product);
$items = Cart::contents();
return View::make('cart.bag', compact('items'));
}
Других решений пока нет …