2011-06-07 19 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