2010-08-12 92 views
2

导入产品配置文件允许您按名称过滤要导出哪些产品,sku ... 我希望在管理产品页面中具有相同的功能。 管理员将过滤网格中的产品,然后单击“导出”按钮以获取已过滤的产品。从管理产品网格将产品导出到csv

如何添加“导出”按钮?我需要重写什么模板/块? 当管理员点击按钮时,我如何获得过滤的集合? 如何将过滤后的集合导出到csv文件?我可以使用数据流吗?

感谢

回答

9

您将需要实施新的massAction在管理产品的控制器。开始的一个好方法是看看产品控制器,看看其他massActions是如何实现的。

让我们来看看......首先,您需要添加一个massAction到网格的声明。这可以在app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php中完成。您需要添加以下的_prepareMassaction方法:

$this->getMassactionBlock()->addItem('export', array(
       'label' => Mage::helper('catalog')->__('Export to CSV'), 
       'url' => $this->getUrl('*/*/massExport', array('_current'=>true)), 
      )); 

现在,你将必须实现在产品控制这一新的行动(应用程序/代码/核心/法师/ Adminhtml /控制器/目录/ ProductController.php) :

public function massExportAction() 
    { 
     $productIds = $this->getRequest()->getParam('product'); 
     if (!is_array($productIds)) { 
      $this->_getSession()->addError($this->__('Please select product(s).')); 
      $this->_redirect('*/*/index'); 
     } 
     else { 
      //write headers to the csv file 
      $content = "id,name,url,sku\n"; 
      try { 
       foreach ($productIds as $productId) { 
        $product = Mage::getSingleton('catalog/product')->load($productId); 
        $content .= "\"{$product->getId()}\",\"{$product->getName()}\",\"{$product->getProductUrl()}\",\"{$product->getSku()}\"\n"; 
       } 
      } catch (Exception $e) { 
       $this->_getSession()->addError($e->getMessage()); 
       $this->_redirect('*/*/index'); 
      } 
      $this->_prepareDownloadResponse('export.csv', $content, 'text/csv'); 
     } 

    } 

该代码大多是从massDeleteAction中复制的,而不是删除产品,您应该添加到$ content变量。创建完csv导出的内容(可能需要添加其他字段)后,需要调用控制器类的_prepareDownloadResponse方法。就是这样,你有你的自定义出口!

最后要注意,一旦你高兴的变化记得它们移动到你当地的号码池让你的Magento安装保持更新防:)

+0

哪里管理产品控制? 我无法在Mage_Adminhtml_Catalog_ProductController中看到massAction 如果您能找到代码,它将会很棒。谢谢 – pablo 2010-08-12 18:30:57

+0

@Pablo:我对我的回应表示赞赏。请参阅上面的有效代码示例... – silvo 2010-08-12 18:48:53

+0

而不是自己创建csv,是否可以将产品id或过滤器传递到数据流以创建csv?是否可以向网格中添加类别过滤器? – pablo 2010-08-12 18:57:31