Получение продуктов из заказа в 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;
У меня такая же проблема, и это мое решение