我创建了一个自定义报告。该报告中有大量的字段,当该报告以CSV形式导出时所需的字段。

我要弄清楚的是,是否有一种方法可以省略前端网格上某些字段的渲染。它们中的大多数对于管理员的过滤过程并不重要,只有在下载报告以在Magento之外进行进一步解析时才使用。

我希望这种功能类型能够驻留在网格类中,因为这是生成实际网格的原因,后来是导出的CSV,但我看不到任何看起来像可见性的东西。

在我进入本类中的自定义报告中,是否有一种鲜为人知的方法来实现这一目标,这比我通过AddColumn属性数组添加某种“显示Rid”属性更容易?

TL,DR是否有一种简单的方法可以导出字段(例如,CSV或XML),但被admin网格省略了?

有帮助吗?

解决方案

创建一个单独的块定义 - 例如将网格块复制到针对CSV的另一个块;我会叫这个 Csvgrid.php 代替 Grid.php - 它将包含与正常的所有相同功能 Grid.php 包含,但省略了一列。

在您的控制器中:

public function exportCsvAction()
{
        $fileName = 'myreport_'.date('Y_m_d_h_i_s').'.csv';
        $content = $this->getLayout()->createBlock('mymodule/adminhtml_reports_csvgrid')->getCsv();
}

复制网格时,放置 Csvgrid.php 进入与相同的物理目录 Grid.php 但是相应地重命名 - 不要忘记更改班级名称!

编辑:

所以事实证明 Mage_Adminhtml_Block_Widget_Grid 有一种称为的方法 removeColumn - 定义为:

/

**
     * Remove existing column
     *
     * @param string $columnId
     * @return Mage_Adminhtml_Block_Widget_Grid
     */
    public function removeColumn($columnId)
    {
        if (isset($this->_columns[$columnId])) {
            unset($this->_columns[$columnId]);
            if ($this->_lastColumnId == $columnId) {
                $this->_lastColumnId = key($this->_columns);
            }
        }
        return $this;
    }

我的猜测是因为 Mage_Adminhtml_Block_Report_Grid 扩展 Mage_Adminhtml_Block_Widget_Grid 它继承了此方法,应能够使用。在这种情况下,我会创建一个新的块网格,并扩展您当前报告所在的网格。从那里您可以使用自己的 prepareColumns 方法,调用 parent::_prepareColumns() 然后致电 removeColumn..

祝您好运。

其他提示

您可以使用集合 column_css_classheader_css_class 作为 no-display 到您要隐藏的列。这将使您的专栏从管理网格中隐藏。但是,此列将存在于导出的CSV或XML中。

$this->addColumn('YOUR_COLUMN_ID', array(
        'header'    => Mage::helper('YOUR_HELPER_NAME')->__('YOUR_COLUMN_NAME'),
        'width'     => '150px',
        'index'     => 'YOUR_COLUMN_INDEX',
        'column_css_class'=>'no-display',
        'header_css_class'=>'no-display',
  ));

有一种方法 _afterLoadCollection() 在法师/adminhtml/block/widget/grid.php中,可以覆盖以删除/添加用于导出或显示的列 $this->_isExport.

笔记: 将其添加到 _prepareCollection() 由于收集过滤器不会提交,因此无法使用,从而导致整个集合倾倒了所有过滤。

protected function _afterLoadCollection() {
    if(!$this->_isExport) {
        $this->removeColumn('columnToRemove');
    }
}

如果您只需要这些字段进行报告,为什么不仅以报告添加它们?网格块具有GetCollection方法,该方法将返回收集模型,您可以添加报告所需的字段。

这样做的简单方法是

退回grid.php文件(app/core/mage/adminhtml/block/sales/sales/order/grid.php)

然后像我在下面一样添加您的自定义专栏:

//New columns added but hidded

$this->addColumn('custom_column', array(
   'header' => Mage::helper('sales')->__('Custom Column'),
   'index' => 'custom_column',
   'column_css_class'=>'no-display',
   'header_css_class'=>'no-display',
));

也改变了

protected function _prepareCollection()
{
    $collection = Mage::getResourceModel($this->_getCollectionClass());
    $collection->getSelect()->joinLeft('sales_flat_order', 'main_table.entity_id = sales_flat_order.entity_id',array('custom_column'));     
    $this->setCollection($collection);
    return parent::_prepareCollection();
}

这意味着我们必须将自定义列值添加到集合中。为此,我们必须与网格收集表一起加入我们的桌子。

现在去检查后端,导出订单。将添加我们的自定义列。

许可以下: CC-BY-SA归因
scroll top