wake-up-neo.com

Produkte aus einer Bestellung in Magento abrufen

In meinem Magento-Projekt unter Mein Konto> Meine Bestellungen (angemeldeter Kunde) kann ich die Bestelldetails zusammen mit den bestellten Produkten anzeigen. Nun möchte ich für jedes bestellte Produkt ein bestimmtes Attribut abrufen. Allerdings ist der Codeausschnitt am Anfang von sales/order/items/renderer/default.phtml, der $_item = $this->getItem(); ist, die Reihenfolge selbst. Wenn ich also etwas wie $_item->getId() verwende, bin ich die Bestellnummer und nicht das Produkt erhalten.

Ich habe versucht zu recherchieren und habe diesen Code erhalten:

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

In der Hoffnung, dass ich die Produkt-ID verwenden könnte, um die anderen Attribute des genannten Produkts zu erhalten, erhalte ich jedoch einen Fehler mit diesem Code, ohne dass ich wissen kann, was der Fehler ist. Ich habe auch so etwas ausprobiert:

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

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

Ich bekomme jedoch immer 0, wenn ich versuche, die Anzahl der Artikel in der Produktsammlung zu überprüfen. Wie kann ich auf dieser Seite ein benutzerdefiniertes Attribut für das Produkt abrufen?

10
user1597438

Das sollte besser funktionieren:

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

Weitere Informationen erhalten Sie hier: http://www.magentocommerce.com/boards/viewthread/18629/

24
Seth Malaki

Die Antwort von Electric Jesus wird zwar funktionieren, enthält jedoch ein mögliches Leistungsproblem beim Laden von Produkten in der Schleife.

Die korrekte Implementierung wäre, zunächst IDs der bestellten Produkte abzurufen und dann alle auf einmal zu laden. Vorausgesetzt, Sie haben Ihre Bestellung bereits geladen:

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

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

$productCollection = Mage::getModel('catalog/product')->getCollection();
$productCollection->addAttributeToSelect('*');
$productCollection->addIdFilter($orderedProductIds);
18
Tim Bezhashvyly
$_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;

Ich habe das gleiche Problem und das ist meine Lösung

1