2013-01-09 249 views
0

我有一个显示订单商品的网格。我想显示每个项目的产品详细信息。但有些是simple,有些是configurableMagento 1.7 - 加入可配置产品信息的订单商品

网格中的集合是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'))); 

它似乎显示正确的订单项目。这是正确的方式吗?

回答

0

目前我使用此解决方案:

$collection->addAttributeToFilter('parent_item_id', array('is' => new Zend_Db_Expr('null'))); 
0

里添加这一行?

$ collection-> addAttributeToFilter('parent_item_id',array('is'=> new Zend_Db_Expr('null')));

我看到两个项目一个0,另一个实际产品

http://i.stack.imgur.com/fx1bd.jpg

+0

我创建了自己的模块,并在'Grid.php'我加入这个在功能'保护功能_prepareCollection() {}' – Guus

相关问题