我遇到了一个令人费解的问题,我无法解决这个问题并且让我忙碌了一天。 在我的电子商务Opencart2计划的结帐页面中,人们会在将产品转移到付款页面之前在购物车中了解他们的产品。在结帐页面,他们仍然可以更改所需的产品数量。当他们更改数量时,他们必须单击刷新按钮以重新计算购物车总数。
在原始的opencart脚本中,可以通过简单的输入字段更改数量。但是我想根据库存产品的数量用下拉列表替换这个数量输入字段(因此它们永远不会超过库存数量)。我已经在我的所有网站(中间购物车展示,产品页面等)中成功应用了这一点。但只是在最后的结帐页面,它不起作用。当他们点击下拉菜单的箭头时,下拉列表很好地显示并显示从1,2,3 ...到最大数量的可能数量。
但是当他们选择数量并点击刷新按钮时,他们会返回购物车概述页面,告知购物车中没有产品。
我假设数量不是(空)或不正确(零值)。请有人看看下面的脚本,检查是否有可能的代码错误?它让我发疯,这将使我的一天。此外,还有一种简单的方法(mozilla插件)来检查不同页面之间传递的数量值。
谢谢, SabKo
带有输入字段的cart.tpl页面中的原始代码具有以下代码(并且正在运行):
<td class="text-left quantity">
<div class="input-group btn-block" style="max-width: 200px;">
<input type="text" name="quantity[<?php echo $product[version_compare(VERSION, '2.1', '<') ? 'key' : 'cart_id']; ?>]" value="<?php echo $product['quantity']; ?>" size="1" class="form-control" />
<span class="input-group-btn">
<button type="submit" data-toggle="tooltip" title="<?php echo $button_update; ?>" data-product-key="<?php echo $product[version_compare(VERSION, '2.1', '<') ? 'key' : 'cart_id']; ?>,<?php echo $product['quantity']; ?>" class="btn btn-primary btn-update" ><i class="fa fa-refresh"></i></button>
<button type="button" data-toggle="tooltip" title="<?php echo $button_remove; ?>" data-product-key="<?php echo $product[version_compare(VERSION, '2.1', '<') ? 'key' : 'cart_id']; ?>" class="btn btn-danger btn-delete"><i class="fa fa-times-circle"></i></button>
</span>
</div>
</td>
我更改了cart.tpl页面中的脚本,如下所示:
<td class="text-left quantity">
<div class="input-group btn-block" style="max-width: 200px;">
<select name="quantity[<?php echo $product[version_compare(VERSION, '2.1', '<') ? 'key' : 'cart_id']; ?>]" class="form-control_cart" id="input-quantity" value="<?php echo $product['quantity']; ?>" >
<?php foreach (range($product['minimum'], $product['stockhoeveelheid'], 1) as $stap) {
if ($stap == $product['quantity']) {
echo "<option value='$stap' selected>$stap</option>";
} else {
echo "<option value='$stap'>$stap</option>";
}
} ?>
</select>
<span class="input-group-btn">
<button type="submit" data-toggle="tooltip" title="<?php echo $button_update; ?>" data-product-key="<?php echo $product[version_compare(VERSION, '2.1', '<') ? 'key' : 'cart_id']; ?>,<?php echo $product['quantity']; ?>" class="btn btn-primary btn-update" ><i class="fa fa-refresh"></i></button>
<button type="button" data-toggle="tooltip" title="<?php echo $button_remove; ?>" data-product-key="<?php echo $product[version_compare(VERSION, '2.1', '<') ? 'key' : 'cart_id']; ?>" class="btn btn-danger btn-delete"><i class="fa fa-times-circle"></i></button>
</span>
</div>
</td>
班级&#34; btn-update&#34;在checkout.tpl中启动以下脚本:
$(document).delegate('.checkout-product .input-group .btn-update', 'click', function () {
var key = $(this).attr('data-product-key');
var qty = $('input[name="quantity[' + key + ']"]').val();
$.ajax({
url: 'index.php?route=journal2/checkout/cart_update',
type: 'post',
data: {
key: key,
quantity: qty
},
dataType: 'json',
beforeSend: function() {
triggerLoadingOn();
$('#cart > button > a > span').button('loading');
$('.checkout-cart').addClass('checkout-loading');
},
complete: function() {
triggerLoadingOff();
$('#cart > button > a > span').button('reset');
},
success: function(json) {
setTimeout(function () {
$('#cart-total').html(json['total']);
}, 100);
if (json['redirect']) {
location = json['redirect'];
} else {
$('#cart ul').load('index.php?route=common/cart/info ul li');
$(document).trigger('journal_checkout_reload_payment');
$(document).trigger('journal_checkout_reload_shipping');
}
}
});
});
$(document).delegate('.checkout-product .input-group .btn-delete', 'click', function () {
var key = $(this).attr('data-product-key');
$.ajax({
url: 'index.php?route=journal2/checkout/cart_delete',
type: 'post',
data: {
key: key
},
dataType: 'json',
beforeSend: function() {
triggerLoadingOn();
$('#cart > button > a > span').button('loading');
$('.checkout-cart').addClass('checkout-loading');
},
complete: function() {
triggerLoadingOff();
$('#cart > button > a > span').button('reset');
},
success: function(json) {
setTimeout(function () {
$('#cart-total').html(json['total']);
}, 100);
if (json['redirect']) {
location = json['redirect'];
} else {
$('#cart ul').load('index.php?route=common/cart/info ul li');
$(document).trigger('journal_checkout_reload_payment');
$(document).trigger('journal_checkout_reload_shipping');
}
}
});
});
checkout.php页面上的cart_update代码如下:
public function cart_update() {
$key = Journal2Utils::getProperty($this->request->post, 'key');
$qty = Journal2Utils::getProperty($this->request->post, 'quantity');
$this->cart->update($key, $qty);
$json = array();
if (!$this->checkCart()) {
$json['redirect'] = Journal2Utils::link('checkout/cart');
} else {
$json['total'] = sprintf($this->language->get('text_items'), $this->cart->countProducts() + (isset($this->session->data['vouchers']) ? count($this->session->data['vouchers']) : 0), Journal2Utils::currencyFormat($this->model_journal2_checkout->getTotal()));
}
echo json_encode($json);
exit;
}
答案 0 :(得分:0)
这是你的麻烦:
// As you can see, you're still trying to fetch the value from the input/textbox when you've changed it to a select.
var qty = $('input[name="quantity[' + key + ']"]').val();
// So change the above like so:
var qty = $('select[name="quantity[' + key + ']"]').val();
希望有所帮助,你可以继续工作:)