2014-01-10 68 views
-1

如果我加数量二的产品然后在购物车中有两个数量显示只有一个产品。但我想根据数量显示同一产品的单独行。购物车内容,按数量显示产品个人

像购物车应该如下。

product name Qty price 
ABC    1 $10 
ABC    1 $10 

最后我得到了解决方案。这里是一个答案

打开此文件\程序\代码\核心\法师\销售\型号\ Quote.php并搜索 “_addCatalogProduct” 功能

并更换

$item = $this->getItemByProduct($product); 
    if (!$item) { 

     $item = Mage::getModel('sales/quote_item'); 
     $item->setQuote($this); 
     if (Mage::app()->getStore()->isAdmin()) { 
      $item->setStoreId($this->getStore()->getId()); 
     } 
     else { 
      $item->setStoreId(Mage::app()->getStore()->getId()); 
     } 
     $newItem = true; 
    } 

与评论码。

// $item = $this->getItemByProduct($product); 
    //if (!$item) { 

     $item = Mage::getModel('sales/quote_item'); 
     $item->setQuote($this); 
     if (Mage::app()->getStore()->isAdmin()) { 
      $item->setStoreId($this->getStore()->getId()); 
     } 
     else { 
      $item->setStoreId(Mage::app()->getStore()->getId()); 
     } 
     $newItem = true; 
    // } 

和\程序\代码\核心\法师\结帐\ \控制器CartController.php

更换

$cart->addProduct($product, $params); 

if($params['qty'] == 0 || $params['qty'] == '') 
{ 
    $params['qty'] = 1; 
} 


$quantity = $params['qty']; 

for($loop=1; $loop<=$quantity; $loop++) 
{ 
    $params['qty'] = 1;   
    $cart->addProduct($product, $params);       
} 
+0

这是不是一个很酷的想法,两次销售相同的产品,而不增加其数量在购物车.. –

+0

是的,但我有这样的要求,因为我们必须这样做。所以请给我一个解决方案。 –

+0

我不认为这可以做不做广泛的自定义编码。 –

回答

0

如果你真的必须这样做然后你可以尝试为事件sales_order_place_before创建一个观察者,然后在你的观察者中你可以修改引用lo选择它并找到多个数量项目,将数量更改回1,然后将剩余的项目作为报价项目添加到报价对象。不知道Magento是否会在订单发布期间/之后再次将它们组合在一起。您也许可以使用事件sales_quote_product_add_after做同样的事情,这可能会更好,因为用户会看到购物车页面上的各行,但是又不知道Magento是否会在结帐过程中将qty重新组合在一起,而没有实际拥有让它工作。如果确实如此,可以尝试将产品设置为超级产品并覆盖sku,以便在将其添加到报价之前,它具有标记的唯一标识(例如SKU100-1,SKU100-2等)。

+0

感谢您的回答。但是可以在运行时为产品创建独特的sku(添加到购物车事件观察者),以便quato项目创建同一产品的另一个对象并进入购物车竞争的另一行。 –

0

这个什么:

替换此

 <?php foreach($this->getItems() as $_item): ?> 
      <?php echo $this->getItemHtml($_item) ?> 
     <?php endforeach ?> 

与上线130默认主题/app/design/frontend/yourtheme/default/template/checkout/cart.phtml

<?php foreach($this->getItems() as $_item): ?> 
     <?php $qty = $_item->getQty() ?> 
     <?php for($i=0; $i < $qty; $i++) : ?> 
      <?php $_item->setQty(1); ?> 
      <?php echo $this->getItemHtml($_item); ?> 
     <?php endfor; ?> 
    <?php endforeach ?> 
+0

注:我设置项目数量没有保存或编辑报价项目,如果你只需要渲染,我建议你也编辑购物车/渲染/文件删除输入并更改所有项目的数量。 –

+0

它的工作原理非常感谢您的回复,但它的显示级别不是功能级别。所以无论购物车是在结帐过程中还是在管理员中显示。我必须在那里做同样的事。这就是为什么我想要做到功能级别。 –

+0

我认为在行号965的addProductAdvanced()函数中的\ app \ code \ core \ Mage \ Sales \ Model \ Quote.php中有一个逻辑。 –

相关问题