在 magento 观察者保存自定义订单项属性之前触发电子邮件

Email fires before the custom order item attribute is saved by magento observer

观察者在订单项 table 上保存 Magento 自定义变量时遇到问题。

在自定义属性被 magento 观察者 sales_order_place_after 保存到 table 之前电子邮件触发。但是在下订单之后,我登录管理面板并在那个时间点单击发送邮件按钮,订单邮件具有该自定义属性。订单属性似乎已保存,但电子邮件在此之前触发。

同样来自管理命令创建,我没有使用和观察者,但我已经覆盖了 Mage_Adminhtml_Sales_Order_CreateController 但同样的问题也在它上面引起了。

以下是我使用过的代码:- config.xml

<events>
            <sales_order_place_after>
                <observers>
                    <itemlevelcomment>
                        <type>singleton</type>
                        <class>Company_ItemlevelComment_Model_Observer</class>
                        <method>addOrderComment</method>
                    </itemlevelcomment>
                </observers>
            </sales_order_place_after>
  </events>

 class Company_ItemlevelComment_Model_Observer extends Varien_Event_Observer
{
    public function addOrderComment($observer)
    {
        $order = $observer->getEvent()->getOrder();

        if (!$order) {
            return $this;
        }
          $orderId = $order->getData('entity_id');
          $quote = Mage::getModel('sales/quote')->load($order->getData('quote_id'));
          $cartItems = $quote->getAllVisibleItems();
          $resource = Mage::getSingleton('core/resource');
          $writeConnection = $resource->getConnection('core_write');
            foreach ($cartItems as $item) {
                $quoteItemId = $item->getId();
                $itemComment = Mage::getModel('sales/quote_item')->load($quoteItemId)->getItemComment();

                $query = "UPDATE `sales_flat_order_item` SET item_comment = '".$itemComment."' WHERE quote_item_id = ". (int)$quoteItemId." and order_id = " . $orderId;
                $writeConnection->query($query);
            }
    }

}

我也尝试过加载 Mage_Sales_Order_Item 的对象并保存对象,但是发送的电子邮件没有自定义字段。

我已在以下路径 app\design\frontend\base\default\template\email\order\items\order\default.phtml

上显示电子邮件的自定义属性
<?php $comment =$_item->getItemComment(); ?>
                <?php //if(!empty($comment)): ?>
                    <p class="sku"><?php echo $this->__('Comment'); ?>: <?php echo $this->escapeHtml($_item->getItemComment()) ?></p>
                <?php //endif; ?> 

对此有什么想法吗?

您可以使用以下字段集:

<global>
        <fieldsets>
            <sales_convert_quote_item>
                <item_comment>
                    <to_order_item>*</to_order_item>
                </item_comment>
            </sales_convert_quote_item>
            <sales_convert_order_item>
                <item_comment>
                    <to_quote_item>*</to_quote_item>
                    <to_invoice_item>*</to_invoice_item>
                    <to_cm_item>*</to_cm_item>
                </item_comment>
            </sales_convert_order_item>
        </fieldsets>
<global>