0

我在我的checkout_cart_product_add_after观察者方法中创建了直接保存到报价项的属性,不会保留该值,因为它似乎在观察者退出后被还原。

请参阅下面的代码示例:

config.xml(片段):

<checkout_cart_product_add_after>
    <observers>
      <module>
        <type>model</type>
        <class>NativeRemedies_OrderGroove_Model_Observer</class>
        <method>productAddAfter</method>
      </module>
    </observers>
  </checkout_cart_product_add_after>

Observer.php(片段):

public function handleOrderGroove()
{       
    foreach($this->og->products as $_product){
        if($_product->every>0){
            foreach($this->_quote->getAllVisibleItems() as $_item){
                //if sku is in the active list of recurring products selected add quote item id to array
                if($_item->getSku()==$_product->id){
                    Mage::helper('nrordergroove')->setRecurringItem($_item->getItemId());
                    $_item->setOrdergrooveActive(true)->save();
                    $_item->getProduct()->setPrice(2);
                    $_item->setCustomPrice(2);
                    $_item->setOriginalCustomPrice(2);
                    $_item->getProduct()->setIsSuperMode(true);
                }
            }
        } // else, do nothing
    }

此示例中的 $_item 对象没有提供将属性保留为设置的功能 - 即使在调用->save().

提前感谢您的帮助。我已经看过所有关于设置自定义价格和属性的教程 - 似乎没有什么可以补救这种情况!

编辑 1

我开始觉得这是 1.6+ 中的错误。我在 >=1.4 中看到了很多关于这个工作的讨论。

编辑 2

绝对清楚,这里的问题是自定义定价属性被 Product 模型或 collectTotals 方法有效地覆盖。我需要一个解决方法。

4

2 回答 2

1

事实上,我的工作代码确实有效。与 Amasty 的特别促销的扩展冲突导致自定义定价未设置。这被测试为与以下 Magento 版本一起使用:

  • 1.5 社区
  • 1.6.1 社区
  • 1.11.1.1 企业
于 2013-01-09T15:35:00.693 回答
0

这是您问题的答案,是的,这是在 Magento 1.5+ 的较新版本中:

结帐时,商品会从报价转换为订单,此时您的属性将丢失。

您需要添加类似于此观察者的内容,以便在结帐时保留您的属性:

<sales_convert_quote_item_to_order_item>
    <observers>
        <extra_options>
            <type>model</type>
            <class>extra_options/observer</class>
            <method>salesConvertQuoteItemToOrderItem</method>
        </extra_options>
    </observers>
</sales_convert_quote_item_to_order_item>

在这里,我们将选项从报价项目移动到订单项目。

public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{
    $quoteItem = $observer->getItem();
    if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
        $orderItem = $observer->getOrderItem();
        $options = $orderItem->getProductOptions();
        $options['additional_options'] = unserialize($additionalOptions->getValue());
        $orderItem->setProductOptions($options);
    }
}

在这里查看更多详细信息: Magento - 基于用户输入的报价/订单产品项目属性

于 2012-04-10T13:29:37.123 回答