2011-06-07 98 views
5

我在写一个Observer来管理订单的项目,我需要根据一些自定义属性为每个订单发送一封电子邮件。从Mage_Sales_Model_Order_Item对象获取自定义属性

该项目的对象是Mage_Sales_Model_Order_Item和四处搜寻我尝试过的方法,如getData('my_code'),getCustomAttribute,getAttributeText没有成功。

我需要的类别,大小,颜色和一些自定义属性... 这里我的小码

class Example_OrderMod_Model_Observer{ 

    public function doSomething($observer){ 
    $order = $observer->getEvent()->getOrder(); 

    $id_ordine = $order->getRealOrderId(); 
    $cliente = $observer->getEvent()->getOrder()->getCustomerName(); 

    foreach ($order->getAllItems() as $item) { 
    //$item is an instance of Mage_Sales_Model_Order_Item 

     $quantita = $item->getQtyOrdered(); 
     $codice_giglio = $item->getSku(); 

     //echo $item->getData('size'); 
     var_dump($item->getAttributeText('size')); 
     var_dump($item->getProductOptionByCode('size')); 
     var_dump($item->getProductOptionByCode('famiglia')); 

    } 
// die(); 
    } 
} 

什么想法?

千恩万谢

回答

6

你可能会想加载了产品对象,然后让你的数据从该对象的。这将允许你利用你正在寻找的方法:显示自定义的

$product = Mage::getModel('catalog/product')->load($item->getProductId()); 
$size = $product->getAttributeText('size'); 
+1

使用getProductId()代替的getId()...有在商品的ID和它代表的商品之间是不同的。 – 2013-01-14 20:15:35

3

解决方案属性

function getAttr($product_id, $attributeName) { 
    $product = Mage::getModel('catalog/product')->load($product_id); 
    $attributes = $product->getAttributes(); 
    $attributeValue = null; 
    if(array_key_exists($attributeName , $attributes)) { 
     $attributesobj = $attributes["{$attributeName}"]; 
     $attributeValue = $attributesobj->getFrontend()->getValue($product); 
    } 
    return $attributeValue; 
} 
+0

这是解决问题的唯一工作解决方案,正如我所了解的那样,以及我遇到的问题。 – Goose 2015-11-09 21:24:12

+0

'$ object {$ someprop}'==='$ object [“{$ someprop}”]' – FactoryAidan 2016-06-16 22:29:47

2

当我尝试上述方法并没有在我的观察莫名其妙工作类。实际上产品型号无法加载上述代码块。我发现这个代码,它的工作。它以观察者的身份加载产品模型。

$product = Mage::getModel('catalog/product');

$productId = $product->getIdBySku($item->getSku());

$product->load($productId);

4

如果$产品Mage_Sales_Model_Order_Item的情况下,你可以简单地使用:

$product = $item->getProduct(); 
+1

为什么这不记录是我的一个谜... – Dor 2013-08-27 09:53:11