从管理产品网格将产品导出到 csv

Posted

技术标签:

【中文标题】从管理产品网格将产品导出到 csv【英文标题】:export products to csv from the admin product grid 【发布时间】:2011-03-28 23:48:29 【问题描述】:

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

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

谢谢

【问题讨论】:

【参考方案1】:

您需要在管理产品控制器中实施新的 ma​​ssAction。一个好的开始方法是查看产品控制器并了解其他 massAction 是如何实现的。

让我们看一下...首先,您需要向网格添加一个 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)),
            ));

现在您必须在产品控制器 (app/code/core/Mage/Adminhtml/controllers/Catalog/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 安装保持更新证明:)

【讨论】:

管理产品控制器在哪里?我在 Mage_Adminhtml_Catalog_ProductController 中看不到 massAction 如果您能找到代码,那就太好了。谢谢 @Pablo:我已经修改了我的回复。请参阅上面的工作代码示例... 是否可以将产品 ID 或过滤器传递给数据流以创建 csv,而不是自己创建 csv?是否可以在网格中添加类别过滤器? @Pablo:我不知道如何使用数据流。我还没有对它做任何事情。也许其他人可以发表评论。 太棒了。非常感谢。比其他取出东西的方法更有意义。

以上是关于从管理产品网格将产品导出到 csv的主要内容,如果未能解决你的问题,请参考以下文章

最小化数据库以便从 Magento 导出所有产品

如何以 500 行的块将数据框导出到 csv

如何实现Magento产品批量导入

ExtJS 4.2 将网格数据导出到可下载的 CSV 文件

powershell 功能 - 数据 - UI:将数据网格导出到CSV文件

MySQL 如何批量导入含有大量html的Csv,csv是一个产品表,包含1000条产品,每