【问题标题】:Getting products from an order in Magento从 Magento 的订单中获取产品
【发布时间】:2013-08-22 08:38:46
【问题描述】:

在我的 magento 项目中,在我的帐户 > 我的订单(登录客户)下,我可以查看订单详细信息以及我订购的产品。现在,对于每个订购的产品,我想检索一个特定的属性,但是,据我了解,sales/order/items/renderer/default.phtml 开头的代码 sn-p 即$_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。如何在此页面中检索产品的自定义属性?

【问题讨论】:

  • 谢谢,但我没有产品的 id,所以我不能用它来加载产品的详细信息。
  • 如果您在sales/order/items/renderer/default.phtml 中,变量 $_item 是订单商品,而不是订单,因此您有 $item->getProductId();
  • 非常感谢。我现在获得了产品 ID,但我仍然无法获得要在此处显示的自定义属性。
  • 正如我在第一条评论中所说,如果您查看我的答案,您会发现(在获得 productId 后)您有 2 种方法来获取产品的属性。首先是做一个$product = Mage::getModel('catalog/product')->load($productId); 第二个是将该属性添加到magento的销售模块的系统xml中,这样当创建订单项目时,它就会将该属性从产品复制到它

标签: php magento


【解决方案1】:

虽然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);

【讨论】:

  • Magento 收藏是有原因的!
  • 我们不需要在此结束时调用$productCollection->load();
  • 这取决于你接下来要收集什么。
  • load() 通常会在您尝试对集合执行任何操作(例如循环遍历它)时在集合上被隐式调用。您很少需要自己调用它。
  • 需要更好的解决方案。
【解决方案2】:
$_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;

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

【讨论】:

  • 这个!是从目录中加载产品数据的正确方法。
【解决方案3】:

这应该会更好:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多