以给定价格更改小计&数量(自定义属性)

时间:2014-06-04 15:32:48

标签: magento overwrite magento-1.8 subtotal

我的价格是例如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>

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

看看@ 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);
    }
}