Magento在结账时操纵重量

时间:2017-03-21 17:06:04

标签: magento magento-1.9

我在Magento 1.9中有简单的产品,我可以结合发货,并希望在结账时(以及购物车视图中的运费估算计算等)基于sku更改总运输重量。例如,如果购买了具有正确sku的一个或两个小部件,则它们的重量为1磅。如果购买了具有正确sku的三到五个小部件,它们的重量是2磅组合等。如果包括所有项目,表格可以处理这个。但是,我必须将其限制为由sku确定的某些项目。

目前在Magento,每件物品的重量为1磅,总重量为number of items * 1 lbs。我找到了显示总重量的答案,或更新了数据库中项目的重量,但没有满足这些要求的任何内容。我对Magento很新,我正在努力实现这一目标。如果您回复建议的代码更改,请具体说明应该编辑的文件位置?

修改

根据MladenIlić的建议,我提出了以下代码,用于计算事件sales_quote_collect_totals_after事件的总重量。 如何将新调整的重量发送给Magneto以通过结帐使用?

/app/etc/modules/Weight_Extension.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Weight_Extension>
            <codePool>local</codePool>
            <active>true</active>
        </Weight_Extension>
    </modules>
</config>

/app/code/locale/Weight/Extension/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Weight_Extension>
            <version>0.0.1</version>
        </Weight_Extension>
    </modules>
    <global>
        <models>
            <weight_extension>
                <class>Weight_Extension_Model</class>
            </weight_extension>
        </models>
        <events>
            <sales_quote_collect_totals_after>
                <observers>
                    <weight_extension>
                        <class>weight_extension/observer</class>
                        <method>adjustTotalWeight</method>
                    </weight_extension>
                </observers>
            </sales_quote_collect_totals_after>
        </events>
    </global>
</config>

/应用程序/代码/区域/重量/扩展/型号

<?php 
class Weight_Extension_Model_Observer
{
    public function adjustTotalWeight($observer) 
    {
        $items = Mage::getSingleton('checkout/session')->getQuote()->getAllItems();

        $combinedItems = 0;
        foreach($items as $item)
        {
            if($item->getSku() == 1 || $item->getSku() == 2)
            {
                 $combinedItems++;
            }
        }

        if($combinedItems > 0 && $combinedItems < 3)
            $weight = 1;
        if($combinedItems >= 3 && $combinedItems < 6)
            $weight = 2;

        //send new $weight to Magento and persist through checkout?
    } 
}

如何将新调整的重量发送给Magneto以通过结帐使用?

2 个答案:

答案 0 :(得分:0)

Magento计算用于获取运费的重量Mage_Sales_Model_Quote_Address_Total_Shipping::collect

收集送货地址总计时,项目将循环并累计其权重,然后设置为地址对象。

话虽如此,你必须要小心,你将如何改变这种行为。初看起来,似乎使用sales_quote_collect_totals_after事件可能是正确的方法。

触发事件时,获取所有送货地址项,循环浏览并使用自定义逻辑计算权重。

祝你好运。

答案 1 :(得分:0)

您在 adminhtml 上下文中编写了活动,您必须将其更改为 frontend