12

在我的 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;

希望我可以使用产品 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;

但是当我尝试检查产品集合中的项目数时,我一直得到 0。如何在此页面中检索产品的自定义属性?

4

3 回答 3

23

这应该会更好:

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

于 2013-08-22T08:52:02.813 回答
19

虽然Electric Jesus给出的答案会起作用,但它包含在循环中加载产品的潜在性能问题。

正确的实现是首先获取订购产品的 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);
于 2014-12-12T10:48:18.227 回答
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;

我有同样的问题,这是我的解决方案

于 2017-01-26T09:23:38.427 回答