【问题标题】:How to get own quote-item-field to order-item?如何将自己的报价单字段获取到订单项?
【发布时间】:2012-07-13 00:52:23
【问题描述】:

我想将自定义信息保存在order_item-table。这些信息在购物车中创建。所以我按照this 帖子中的描述进行操作。

我已经安装了属性:

$installer->addAttribute('quote_item', 'final_delivery_time', $settings);

$installer->addAttribute('order_item', 'final_delivery_time', $settings);

在 config.xml 中声明字段集

<fieldset>
        <sales_convert_quote_item>
            <final_delivery_time>
                <to_order_item>final_delivery_time</to_order_item>
            </final_delivery_time>
        </sales_convert_quote_item>

        <sales_convert_order_item>
            <final_delivery_time>
                <to_quote_item>*</to_quote_item>
                <to_invoice_item>*</to_invoice_item>
                <to_shipment_item>*</to_shipment_item>
                <to_cm_item>*</to_cm_item>
            </final_delivery_time>
        </sales_convert_order_item>
</fieldset>

例如购物车中的一些代码

$oQuote = Mage::getSingleton('checkout/session')->getQuote();
    foreach ( $oQuote->getAllItems() as $_item )
    {
        $orderItemId = $_item->getId();
        $_item->setFinalDeliveryTime('some Value');
        $_item->save();
    }

所以我得到了一个报价,我在 sales_flat_quote_item 表中有我的字段 final_delivery_time 和这个值

我在onepage-review下单后,sales_flat_order_item table应该也有这个字段,但是什么都没有。列中代表null。 所以我需要按顺序保存的字段的值。

【问题讨论】:

  • 请指定文件路径和代码中您放置最后一个代码位的位置。
  • 为了进行测试,我在帮助程序中执行此操作,并在我的设计中使用 echo $deliveryTimeHelper-&gt;setDeliveryTimeInOrder(); 在 .../template/checkout/cart/item/default.phtml 中调用它们。这是可行的,因为我在表 sales_flat_quote_item 中看到了每个 phpmyadmin 的值。我还在结帐的审核步骤中使用public function getDeliveryTimeInOrder() { $quote = Mage::getModel('checkout/cart')-&gt;getQuote(); $delTime = ''; foreach ( $quote-&gt;getAllItems() as $_item ) { $delTime.=$_item-&gt;getFinalDeliveryTime(); } return $delTime; } 调用它
  • 下订单后,值仍在 sales_flat_quote_item 表中,但不在 sales_flat_order_table 中
  • 您能否追踪并检查getQuote() 是否返回了报价对象?
  • 是的,我用 Mage::getModel('checkout/cart')-&gt;getItems();Mage::getSingleton('checkout/session')-&gt;getQuote(); 试试这个,当我浏览这些项目时,我得到了正确的值 ($_item-&gt;getFinalDeliveryTime();)

标签: magento quote


【解决方案1】:

我找到了解决办法

它是一个观察者 我添加以下代码

config.xml

...  
<events>
        <sales_convert_quote_item_to_order_item>
            <observers>
                <quoteitem_set_custom_data>
                    <class>DeliveryTime/observer</class>
                    <method>setCustomDataOnQuoteItem</method>
                </quoteitem_set_custom_data>
            </observers>
        </sales_convert_quote_item_to_order_item>
</events>
...

Observer.php

...
public function setCustomDataOnQuoteItem(Varien_Event_Observer $observer)
{

    $quote = Mage::getModel('checkout/cart')->getQuote();
    $orderItem = $observer->getOrderItem();
    foreach ( $quote->getAllVisibleItems() as $_item )
    {
        if ($_item->getSku() == $orderItem->getSku())
        {
            $orderItem->setFinalDeliveryTime($_item->getFinalDeliveryTime());
        }
    }
}
...

所以一切都按顺序保存

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    • 1970-01-01
    • 2017-11-22
    • 2021-12-09
    • 1970-01-01
    • 2018-03-16
    • 1970-01-01
    相关资源
    最近更新 更多