在 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>
观察者在订单项 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>