Получение продуктов из заказа в Magento

В моем проекте magento, в разделе "Моя учетная запись" > "Мои заказы" (зарегистрированный клиент), я могу просмотреть детали заказа вместе с заказанными мной продуктами. Теперь, для каждого из упорядоченного продукта, я хотел бы получить конкретный атрибут, однако, по моему мнению, фрагмент кода в начале sales/order/items/renderer/default.phtml, который является $_item = $this->getItem();, является самим порядком, поэтому, если я использую что-то вроде $_item->getId(), я получаю идентификатор заказа, а не продукт.

Я попытался исследовать и получил этот код:

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

Надеясь, что я могу использовать идентификатор продукта, чтобы получить другие атрибуты упомянутого продукта, я получаю сообщение об ошибке с этим кодом, не указывая, что такое ошибка. Я также пробовал что-то вроде этого:

 $_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

Это должно работать лучше:

   $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/

Ответ 2

В то время как ответ, заданный Electric Jesus, будет работать, он содержит потенциальную проблему с производительностью загрузки продуктов в цикле.

Правильная реализация будет первой, чтобы получить идентификаторы упорядоченных продуктов, а затем загрузить все из них сразу. Предполагая, что ваш заказ уже загружен:

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

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

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

Ответ 3

$_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;

У меня такая же проблема, и это мое решение