从admin产品网格将产品导出到csv

pab*_*blo 2 grid dataflow magento

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

如何添加"导出"按钮?我需要覆盖哪些模板/块?当管理员单击按钮时,如何获取过滤后的集合?如何将过滤后的集合导出到csv文件?我可以使用数据流吗?

谢谢

sil*_*lvo 10

您需要在admin产品控制器中实现新的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)),
            ));
Run Code Online (Sandbox Code Playgroud)

现在,您必须在产品控制器中实现此新操作(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');
        }

    }
Run Code Online (Sandbox Code Playgroud)

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

最后一点,一旦您对更改感到满意,请记住将它们移动到本地代码池,以便您的magento安装保持更新防护:)