2013-08-22 5 views
10

Nel mio progetto Magento, sotto Il mio account> I miei ordini (cliente registrato), sono in grado di visualizzare i dettagli dell'ordine insieme ai prodotti che ho ordinato. Ora, per ognuno dei prodotti ordinati, vorrei recuperare un attributo specifico, tuttavia, a quanto mi risulta, il frammento di codice all'inizio di sales/order/items/renderer/default.phtml che è $_item = $this->getItem(); è l'ordine stesso, quindi se uso qualcosa come $_item->getId(), sono ottenere l'ID ordine e non quello del prodotto.Ottenere prodotti da un ordine in Magento

ho provato la ricerca e finito con questo codice:

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

sperando di poter utilizzare il prodotto id per ottenere gli altri attributi di detto prodotto tuttavia, I 'm ricevendo un errore con questo codice senza modo di dire qual è l'errore. Ho anche provato qualcosa di simile:

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

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

Ma io continuo a ricevere 0 quando si tenta di controllare il numero di elementi nella raccolta del prodotto. Come posso recuperare un attributo personalizzato per il prodotto in questa pagina?

+1

Si può vedere la mia risposta da questa domanda http://stackoverflow.com/questions/18307847/product-details-in-magento/18309045 # 18309045 – Emi

+0

Grazie, ma non ho l'id dei prodotti, quindi non posso utilizzarlo per caricare i dettagli del prodotto. – user1597438

+2

Se si è in 'vendite/ordini/articoli/renderer/default.phtml' la variabile $ _item è un articolo dell'ordine, non un ordine in modo da avere $ item-> getProductId(); – Emi

risposta

24

Questo dovrebbe funzionare meglio:

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

Date un'occhiata qui per ulteriori informazioni: http://www.magentocommerce.com/boards/viewthread/18629/

18

Mentre la risposta data da Electric Jesus funzionerà contiene un potenziale problema di prestazioni dei prodotti di carico nel circuito.

L'implementazione corretta sarebbe innanzitutto ottenere gli ID dei prodotti ordinati e quindi caricarli tutti in una volta. Supponendo che avete già il vostro ordine caricati:

$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 ha collezione per un motivo! – anshuman

+0

non è necessario chiamare '$ productCollection-> load();' alla fine di questo – ahnbizcad

+0

Dipende da cosa si accederà alla raccolta successiva. –

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; 

Ho lo stesso problema e questa è la mia soluzione

+0

QUESTO! è l'approccio corretto per caricare i dati di prodotto dal catalogo. – Martin