使用给定的价格和数量更改小计(自定义属性)
Posted
技术标签:
【中文标题】使用给定的价格和数量更改小计(自定义属性)【英文标题】:Change subtotal with given price & quantity (custom attribute) 【发布时间】:2014-06-04 15:32:48 【问题描述】:例如我的价格是 10,00 € 这个价格是 100 克 客户可以在数量字段中添加任何 g,例如 300
magento 现在小计 3000,还可以,但不满足我这里的需要。
我需要做: 如果设置了价格和数量,则获取小计/价格数量,设置新的小计
我可以把我的修改放在哪里?
非常感谢! 丹尼斯
编辑 以及观察者的第三次尝试(不工作 atm,没有错误,没有任何反应):
class Xyz_Catalog_Model_Price_Observer
public function __construct()
public function apply_quantity_order($observer)
$order = $observer->getEvent()->getOrder();
$pricequantity = $order->getPricequantity();
if($pricequantity != '')
$old_sub_total = $order->getTotals();
$new_sub_total = $old_sub_total / 100;
$order->setTotals($new_sub_total);
else
return $this;
public function apply_quantity_quote($observer)
$quote = $observer->getEvent()->getQuote();
$pricequantity = $quote->getPricequantity();
if($pricequantity != '')
$old_sub_total = $quote->getTotals();
$new_sub_total = $old_sub_total / 100;
$quote->setTotals($new_sub_total);
else
return $this;
XML:
<?xml version="1.0"?>
<config>
<global>
<models>
<xyzcatalog>
<class>Xyz_Catalog_Model</class>
</xyzcatalog>
</models>
<events>
<sales_order_save_after>
<observers>
<xyz_catalog_price_observer>
<class>Xyz_Catalog_Model_Price_Observer</class>
<method>apply_quantity_order</method>
</xyz_catalog_price_observer>
</observers>
</sales_order_save_after>
<sales_quote_save_after>
<observers>
<xyz_catalog_price_observer>
<class>Xyz_Catalog_Model_Price_Observer</class>
<method>apply_quantity_quote</method>
</xyz_catalog_price_observer>
</observers>
</sales_quote_save_after>
</events>
</global>
</config>
【问题讨论】:
【参考方案1】:与其覆盖小计计算功能,我建议尝试事件 - sales_quote_save_after 和 sales_order_save_after。
您可以通过观察者方法获取报价和销售
$observer->getEvent()->getOrder() //for order
$observer->getEvent()->getQuote() //for quote
然后相应地修改小计。
编辑:这可能只是提示您如何修改小计。
Edit2:您必须在配置中添加事件观察器,如下所示:
<sales_order_save_after>
<observers>
<yourext>
<class>yourext/observer</class>
<method>observerMethod</method>
</yourext>
</observers>
</sales_order_save_after>
详情请关注Customize Magento using Event/Observer
【讨论】:
我在哪里可以使用这个“事件”,我也许可以得到一些代码来工作,我只是不知道它的正确位置在哪里。谢谢 链接中的示例有效。我对自己代码的尝试肯定是错误的:-)(看我的编辑)。我不确定 xml ?以及如何在此处正确使用 Order 和 Quote。也许我很亲密,你可以再次帮助我。非常感谢。 ops,关于税收,我很抱歉,事实上我复制了那个代码。应该是yourext
我对我的答案进行了编辑,让我编辑你的问题。请参阅 KrishEdit1 部分。
对不起,放弃我的编辑。您必须添加两个 tax
可以替换为 ayourext
之类的任何内容。它只是事件观察者的 id。您必须添加两个事件sales_order_save_after
和sales_quote_save_after
。
我在顶部更新了我的代码。我认为我们接近了,但 getQuote 不起作用。谢谢【参考方案2】:
看看@Programmatically add product to cart with price change
public function applyDiscount(Varien_Event_Observer $observer)
/* @var $item Mage_Sales_Model_Quote_Item */
$item = $observer->getQuoteItem();
if ($item->getParentItem())
$item = $item->getParentItem();
// calc special price
$percentDiscount = 5;
$specialPrice = $item->getOriginalPrice() - $percentDiscount;
// Make sure we don't have a negative
if ($specialPrice > 0)
$item->setCustomPrice($specialPrice);
$item->setOriginalCustomPrice($specialPrice);
$item->getProduct()->setIsSuperMode(true);
【讨论】:
我认为这不再奏效了,明天试试。谢谢 您也可以尝试为客户提供总折扣而不是价格折扣。请参阅excellencemagentoblog.com/magento-add-fee-discount-order-total以上是关于使用给定的价格和数量更改小计(自定义属性)的主要内容,如果未能解决你的问题,请参考以下文章