2013-08-22 270 views
10

在我的magento項目中,在我的帳戶>我的訂單(登錄客戶)下,我可以查看訂購詳情以及我訂購的產品。現在,對於每個訂購的產品,我想檢索一個特定的屬性,但是,據我瞭解,sales/order/items/renderer/default.phtml開頭的代碼片段是$_item = $this->getItem();就是訂單本身,所以如果我使用類似$_item->getId()的東西,我是獲取訂單ID而不是產品。在Magento中訂購產品

我試圖研究和結束了這段代碼:

$orders = Mage::getModel('sales/order')->load($_item->getId()); 
foreach($orders as $order): 
    $is = $order->getAllItems(); 
    foreach($is as $i): 
     echo $i->getProductId(); 
    endforeach; 
endforeach; 

希望我可以使用該產品ID但是獲得上述產品的其他屬性,我是得到一個錯誤,這個代碼不告訴錯誤是什麼的方式。我也嘗試過這樣的事情:

$_productCollection = Mage::getResourceModel('reports/product_collection') 
         ->addAttributeToSelect('*') 
         ->addAttributeToFilter('name', $name); 

        foreach($_productCollection as $_product): 
         $_temp = $_product->getResource()->getAttribute('name_en')->getFrontend()->getValue($_product); 
        endforeach; 

但是,當我嘗試檢查產品集合中的項目數時,我總是收到0。如何在本頁中檢索產品的自定義屬性?

+1

你可以看到我的回答這個問題http://stackoverflow.com/questions/18307847/product-details-in-magento/18309045#18309045 – Emi

+0

謝謝,但我沒有產品的編號,因此我無法使用它來加載產品的詳細信息。 – user1597438

+2

如果你在'sales/order/items/renderer/default.phtml'中,變量$ _item是一個訂單項目,而不是一個訂單,所以你有$ item-> getProductId(); – Emi

回答

24

這應該更好地工作:

$orderIncrementId = '100000010'; 
    $order = Mage::getModel('sales/order')->loadByIncrementId($orderIncrementId); 
    $items = $order->getAllVisibleItems(); 
    foreach($items as $i): 
     echo $i->getProductId(); 
    endforeach; 

看看這裏獲取更多信息:http://www.magentocommerce.com/boards/viewthread/18629/

18

雖然通過Electric Jesus給出的答案會工作,它包含了裝載產品潛在的性能問題的循環。

正確的實施將首先獲得有序產品的ID,然後一次加載所有產品。假設你已經在你的順序加載:

$orderedItems = $order->getAllVisibleItems(); 
$orderedProductIds = []; 

foreach ($orderedItems as $item) { 
    $orderedProductIds[] = $item->getData('product_id'); 
} 

$productCollection = Mage::getModel('catalog/product')->getCollection(); 
$productCollection->addAttributeToSelect('*'); 
$productCollection->addIdFilter($orderedProductIds); 
+0

Magento有收集的理由! – anshuman

+0

我們不需要在這個 – ahnbizcad

+0

的末尾調用'$ productCollection-> load();'這取決於你接下來要做什麼。 –

1
$_orders = $this->getOrders(); 
$orderitems = $_order->getAllVisibleItems(); 
foreach ($_orders as $_order): 
    $orderitems = $_order->getAllVisibleItems(); 
    foreach ($orderitems as $orderitem): 
    $product = $orderitem->getProduct(); 
    echo $product->getId(); 
    endforeach; 
endforeach; 

我有同樣的問題,這是我的解決方案

+0

這個!是從目錄加載產品數據的正確方法。 – Martin