我正在尝试对OpenCart中的实际购物车进行一些更改。 至于现在,当向购物车添加产品时,信息将以下列方式显示:
Product1 Amount:
Size: XL 2
如果将同一产品(但尺寸不同)添加到购物车中,则会创建一个新行。 我的愿望是获得以下设计的购物车
Product1 S M L XL
1 2
因此,每个产品只会创建一个单行,然后在相应的大小类别下显示正确的数量。 到目前为止,这是我的代码:
<?php
$saveName = array();
$sizesArray = array("S","M","L","XL");
$x = 0;
if($products || $vouchers) {
foreach ($products as $product){
foreach ($product['option'] as $option) {
$option['value'];
}
$saveName[$x] = $product['name'].'|'.$option['value'].'|'.$product['quantity'];
$seperateValues = explode("|",$saveName[$x]);
?>
<tr>
<td class="image"><?php if ($product['thumb']) { ?>
<a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" title="<?php echo $product['name']; ?>" /></a>
<?php } ?></td>
<td class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></td>
<?php
foreach($sizesArray as $sizes){
if($sizes == $seperateValues[1]){
echo '<td>'.$seperateValues[0].' '.$seperateValues[2].'</td>';
}
else{
echo '<td>0</td>';
}
}
?>
<td class="total"><?php echo $product['total']; ?></td>
<td class="remove">Remove</td>
</tr>
<?php
$x++;
}
?>
代码格式化了正确类别下的金额,但我不能让它为每个产品只生成一行。任何帮助都很受欢迎。
谢谢!
答案 0 :(得分:0)
修改模板不会起作用,因为Opencart在内部以product_id:serialized_array_of_options格式将产品存储在数组中,因此具有相同ID但不同选项组合的产品将单独存储。您可以在/system/library/cart.php中的getProducts方法中看到:
foreach ($this->session->data['cart'] as $key => $quantity) {
$product = explode(':', $key);
$product_id = $product[0];
$stock = true;
// Options
if (isset($product[1])) {
$options = unserialize(base64_decode($product[1]));
} else {
$options = array();
}
因此,要实现您想要的,您将对Cart类在会话中存储产品的方式进行更改。