导入产品配置文件允许您按名称、sku 筛选要导出的产品... 我希望在管理产品页面中具有相同的功能。管理员将过滤网格中的产品,然后单击“导出”按钮以获取过滤后的产品。
如何添加“导出”按钮?我需要覆盖什么模板/块?当管理员单击按钮时,我如何获得过滤后的集合?如何将过滤后的集合导出到 csv 文件?我可以为此使用数据流吗?
谢谢
您将需要在管理产品控制器中实现一个新的massAction 。一个好的开始方法是查看产品控制器并了解其他 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 安装保持更新证明:)