Magento报价项目的定制定价/属性

时间:2012-04-10 11:37:22

标签: php magento

我已经创建了直接保存到我checkout_cart_product_add_after中的引用项的属性Observer方法不会保留该值,因为它似乎在Observer退出后恢复。

请参阅以下代码示例:

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+中的一个错误。我已经看到很多关于这个工作的讨论在&gt; = 1.4。

编辑2

为了绝对清楚,这里的问题是Product Model属性被Product Model或collectTotals方法有效覆盖。我需要一个解决方法。

2 个答案:

答案 0 :(得分:1)

事实上,我在这里的工作代码确实起作用了。与Amasty特别促销活动的延期冲突导致定制定价未被设定。这被测试为使用以下Magento版本:

  • 1.5社区
  • 1.6.1社区
  • 1.11.1.1 Enterprise

答案 1 :(得分: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 - Quote/order product item attribute based on user input