从Magento的订单中获取产品

use*_*438 11 php magento

在我的magento项目中,在我的帐户>我的订单(登录客户)下,我可以查看订单详细信息以及我订购的产品.现在,每个订购的产品,我想不过来检索特定属性,从我的理解,一开始的代码片段sales/order/items/renderer/default.phtml$_item = $this->getItem();是订单本身,所以如果我使用这样的$_item->getId(),我要出货id而不是产品.

我尝试过研究并最终得到这个代码:

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

希望我可以使用产品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;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试检查产品系列中的项目数时,我一直变为0.如何在此页面中检索产品的自定义属性?

Set*_*aki 23

这应该更好:

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

请查看更多信息:http://www.magentocommerce.com/boards/viewthread/18629/


use*_*772 19

虽然电气耶稣给出的答案将起作用,但它包含了在循环中加载产品的潜在性能问题.

正确的实现将首先获取已订购产品的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);
Run Code Online (Sandbox Code Playgroud)