我在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以通过结帐使用?
答案 0 :(得分:0)
Magento计算用于获取运费的重量Mage_Sales_Model_Quote_Address_Total_Shipping::collect
。
收集送货地址总计时,项目将循环并累计其权重,然后设置为地址对象。
话虽如此,你必须要小心,你将如何改变这种行为。初看起来,似乎使用sales_quote_collect_totals_after
事件可能是正确的方法。
触发事件时,获取所有送货地址项,循环浏览并使用自定义逻辑计算权重。
祝你好运。
答案 1 :(得分:0)
您在 adminhtml 上下文中编写了活动,您必须将其更改为 frontend 。