我已通过programmaticaly允许客户编辑产品的价格。
问题是当我添加20美元的产品并在购物车页面中再次添加30美元的相同产品时,它会显示产品-| qty=2 -| total price=60$
所以这不是逻辑,总价格必须是50美元,不应该将数量设置为2
我知道问题出在SKU是否有解决方案我不想修改SKU?
了解更多详情this是我之前的问题
答案 0 :(得分:2)
所以这是可行的,但不幸的是,如果没有非常重要的重写,就没有办法做到这一点。我假设您有一些方法来识别除价格之外的两个报价项目之间的差异。如果是这样的话:
sales / quote_item:representProduct()
模块中的重写配置:
<?xml version="1.0"?>
<config>
<global>
<models>
<sales>
<rewrite>
<!--Your full class name should be specified-->
<quote_item>Namespace_Module_Model_Sales_Quote_Item</quote_item>
</rewrite>
</sales>
</models>
</global>
</config>
原始功能: 公共功能代表产品($ product) { $ itemProduct = $ this-&gt; getProduct(); if(!$ product || $ itemProduct-&gt; getId()!= $ product-&gt; getId()){ 返回false; }
/**
* Check maybe product is planned to be a child of some quote item - in this case we limit search
* only within same parent item
*/
$stickWithinParent = $product->getStickWithinParent();
if ($stickWithinParent) {
if ($this->getParentItem() !== $stickWithinParent) {
return false;
}
}
// Check options
$itemOptions = $this->getOptionsByCode();
$productOptions = $product->getCustomOptions();
if (!$this->compareOptions($itemOptions, $productOptions)) {
return false;
}
if (!$this->compareOptions($productOptions, $itemOptions)) {
return false;
}
return true;
}
我们的职能:
public function representProduct($product) {
$parentResult = parent::representProduct($product);
//if parent result is already false, we already have a different product, exit.
if ($parentResult === false) {
return $parentResult;
}
$itemProduct = $this->getProduct();
/*
* do our check for 'same product' here.
* Returns true if attribute is the same thus it is hte same product
*/
if ($product->getSomeAttribute() == $itemProduct->getSomeAttribute()) {
return true; //same product
} else {
return false; //different product
}
}
如果此功能返回true,则产品将作为同一项目合并到购物车中,因此您只需按新的数量增加数量。
如果此功能返回false,则产品看起来会有所不同,并会在购物车中显示为不同的商品。
答案 1 :(得分:0)
使用不同的&#34; SKU&#34;添加相同的产品你可以为这些产品提供不同的价格。
答案 2 :(得分:0)
这是班级:
<?php
class WebDirect_CustomPrice_Model_Sales_Quote_Item extends Mage_Sales_Model_Quote_Item
{
public function representProduct($product) {
$parentResult = parent::representProduct($product);
//if parent result is already false, we already have a different product, exit.
if ($parentResult === false) {
return $parentResult;
}
$itemProduct = $this->getProduct();
/*
* do our check for 'same product' here.
* Returns true if attribute is the same thus it is hte same product
*/
if ($product->getPrice() == $itemProduct->getPrice()) {
return true; //same product
} else {
return false; //different product
}
}
}