我有一个销售自定义标志的公司的Magento网站。我设置了自定义选项,以便客户可以选择所需的材料和尺寸。我的问题是我需要能够根据材料和所选尺寸动态计算标志的重量。我用javascript计算了权重,现在我正在尝试使用checkout_product_add_after事件将其传递给Magento。
我已经设置了一个名为Weight的自定义选项,它是一个文本输入字段。我用javascript隐藏输入字段并传入计算的权重。我可以使用我的自定义模块访问权重并使用setWeight()方法设置权重,但是当我进入结帐时,权重尚未更新且运费没有变化。我已经尝试在报价项目和产品上设置权重,但都不起作用。
以下是我的Observer.php文件中的代码:
<?php
class XM_CustomWeight_Model_Observer {
public function set_custom_weight($observer) {
$event = $observer->getEvent();
$product = $event->getProduct();
$options = $product->getCustomOptions();
$last = end($options);
$weight = $last->getValue();
$product->setWeight($weight);
$product->save();
}
}
有没有人遇到过这个问题并找到了一个好的解决方案?谢谢你的帮助!
答案 0 :(得分:0)
看看@ Magento - Programmatically saved product not visible in backend
我认为您可能需要将商店ID设置为Admin
Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
您是否考虑过多个客户在几秒内购买相同商品的可能性,第一个人可能/将获得最后一个人的重量或者客户是否更改了邮政编码在结账时需要重新计算运费。
我认为您可以做的是创建自定义送货模块(通过扩展当前的模块),然后为每个订单项添加自定义权重,并使用此custom_weight来帮助计算运费
看看@ How to add custom fields for Order Line Items in magento