我有一个显示订单项目的网格。我想显示每个项目的产品详细信息。但有些是simple
,有些是configurable
。
网格中的集合是sales/order_item_collection
.
在_prepareCollection()
我有这些连接:
$collection->getSelect()->join(
array('orders_alias' => $resource->getTableName('sales/order'))
, 'main_table.order_id = orders_alias.entity_id'
, array('orders_alias.increment_id', 'order_date' => 'orders_alias.created_at')
, null);
$collection->getSelect()->join(
array('p' => $resource->getTableName('catalog/product'))
, 'main_table.product_id = p.entity_id
, array('product_sku' => 'p.sku')
, null);
对于具有可配置产品的订单项目,我看到一个额外的行。
例如,如果有人购买了 XXL 码的衬衫,我会看到 2 行的订单商品。
我想我只需要展示可见的产品。我该怎么做?
如果我从订单中取出并展示商品,我可以这样做:
// get order items
$items = $order->getAllVisibleItems();
但我需要从一个项目中检查它是否可见。
看着\app\code\core\Mage\Sales\Model\Order.php
我看到:
public function getAllVisibleItems()
{
$items = array();
foreach ($this->getItemsCollection() as $item) {
if (!$item->isDeleted() && !$item->getParentItemId()) {
$items[] = $item;
}
}
return $items;
}
所以如果我添加这个过滤器:
$collection->addAttributeToFilter('parent_item_id', array('is' => new Zend_Db_Expr('null')));
它似乎显示了正确的订单项目。这是正确的方法吗?