Php Yii eexcelview未导出网格过滤器

Php Yii eexcelview未导出网格过滤器,php,csv,controller,yii,Php,Csv,Controller,Yii,我试图通过单击按钮,使用excelview扩展名将cgridview数据(当前搜索结果)导出到CSV 但是,我没有在我的CSV中获得过滤数据;相反,我得到了模型中的所有记录 这是我正在调用的控制器操作: public function actionExcel() { $model = new PackagingMetric('search'); $this->widget('application.extensions.EExcelView', array(

我试图通过单击按钮,使用
excelview
扩展名将
cgridview
数据(当前搜索结果)导出到CSV

但是,我没有在我的CSV中获得过滤数据;相反,我得到了模型中的所有记录

这是我正在调用的控制器操作:

    public function actionExcel()
{
    $model = new PackagingMetric('search'); 
    $this->widget('application.extensions.EExcelView', array( 
            'dataProvider'=> $model->search(), 
            'grid_mode'=>'export', 
            'exportType'=>'Excel5', 
            'filename'=>'report', 
            )); 
}

是否有人知道如何解决此问题,或者我的错误在哪里?

您没有任何搜索条件。通常你是这样做的:

$model = new PackagingMetric('search');
$model->attributes = $_POST['PackagingMetric']; // this would be the model associated with the search form
$model->search();
我在您的代码中没有看到任何从用户输入中获取值的内容,因此您应该以某种方式使用搜索表单。当然,您可以在模型中使用默认值,但我认为情况并非如此

编辑:

我进一步研究了您正在使用的扩展的源代码。似乎导出按钮实际上是标准的
链接,可以将您发送到一个应该输出Excel工作表的页面。但是,由于实际的过滤器数据没有传输到该页面,因此无法在服务器端应用这些过滤器

因为这是扩展的预期行为,所以没有优雅的方法来解决它,但也有混乱的方法

第一个选择是自己调整扩展,但这将破坏与未来版本的兼容性。另一种方法是使用Javascript将数据发送到需要的地方。在显示gridview的视图文件中,应将小部件包装在
表单
元素或
活动表单
中,并禁用所有验证。然后,您需要将以下Javascript代码放在页面的某个位置:

var $excelForm = $( '#your_form_id' );
$( '.summary a', $excelForm ).click( function() {
    $excelForm.attr( 'action', this.href ).submit();
    return false;
});
这将把表单提交到导出链接指定的地址。因为表单包装了小部件,它将包含过滤结果的输入元素,所以您可以访问服务器上用户输入的过滤器。您可以使用我最初发布的代码从那里获取数据


注意:我正在为包含导出按钮的
div
使用默认类名,即
.summary
。如果您使用的是不同的类,您应该更改相应的JS代码。

谢谢您的帮助,但是您的第二行给了我一个未定义的索引:PackageMetric error。在我所做的所有关于如何使用此扩展的示例的研究中,我没有看到任何关于将POST数据从视图传递到控制器的内容。我发布的代码只不过是使用搜索的“标准”方式。您必须使其适应您自己的代码。你实际上是如何过滤搜索的?用户是否有可以填写的搜索表单?用户使用的“搜索”是允许您在CGRIDview中过滤数据的内置框。现在我更了解你的情况,所以我更新了我的答案。