首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我需要编写一个以CSV和XLSX格式导出数据的插件。10月CMS

我需要编写一个以CSV和XLSX格式导出数据的插件。10月CMS
EN

Stack Overflow用户
提问于 2021-11-02 10:32:34
回答 1查看 193关注 0票数 0

我需要编写一个以CSV和XLSX格式导出数据的插件。作为一个基础,我遵循使用Vojta的插件代码(1)后端行为的ImportExport。

主插件控制器DataImportExport从位于ImportExportController中的后端继承导入导出行为。

代码语言:javascript
复制
class DataImportExport extends Controller
   {​​​​​​​
      public$implement = [
            'Backend.Behaviors.ImportExportController', 
      ];
       ...
   }

正是这种行为具有将数据导出到CSV文件的方法。然而,如果我想要导出到XLSX文件,我应该添加相应的方法到该行为,即通过覆盖导出控制器的一些现有方法。然而,当我在DataImportExport控制器中这样做的时候,它不工作.当我尝试/测试时,出口过程和以前一样,只有CSV.似乎无法覆盖/扩展后端行为,即modules\backend\behaviors\ImportExportController.php

例如,在DataimportExport控制器上,我试图通过为XLSX导出添加代码来覆盖ImportExportController行为的exportFromList()方法-

然而,没有积极的变化..。当我尝试的时候。

代码语言:javascript
复制
class DataImportExport extends Controller
{
    public $implement = [
       'Backend.Behaviors.ImportExportController', 
    ];

public function __construct()
{
    parent::__construct();
        
    BackendMenu::setContext('RainLab.User', 'user', $this->action);
    
    // extending the ImportExportController behavior
    \Backend\Behaviors\ImportExportController::extend(function($model) {
        $model->addDynamicProperty('tagsCache', null);

        $model->addDynamicMethod('writeXLSX', function() use ($model) {
            
        });

        $model->addDynamicMethod('getTagsAttribute', function() use ($model) {
            if ($this->tagsCache) {
                return $this->tagsCache;
            } else {
                return $this->tagsCache = $model->tags()->lists('name');
            }
        });
    });


}    
...

// method to override
public function exportFromList($definition = null, $options = [])
{
    ... 
    $response = Response::make();
    if ($options['export_type'] == 'csv') {
        /*
        * Response CSV
        */        
        $response->header('Content-Type', 'text/csv');
        $response->header('Content-Transfer-Encoding', 'binary');
        $response->header('Content-Disposition', sprintf('%s; filename="%s"', 'attachment', $filename));
        $response->setContent((string) $csv);
    } else {
        // export into xlsx code             
    }
    
    return $response;
   }
}

备注

  1. Vojta的插件只从CSV文件中导出/导入。
EN

回答 1

Stack Overflow用户

发布于 2021-11-04 17:07:59

也许你应该看看https://octobercms.com/plugin/vdomah-excel,在那里你可以导入和导出CSV和Excel文件?文档非常好,我在许多项目中使用它来导入数据,而且它运行得很好。

最好,卢卡斯

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69808896

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档