Мне нужно написать плагин, который экспортирует данные как в форматах CSV, так и XLSX. Октябрь CMS

#export-to-excel #xlsx #octobercms #octobercms-plugins #octobercms-backend

Вопрос:

Мне нужно написать плагин, который экспортирует данные как в форматах CSV, так и XLSX *. В качестве основы я следую коду плагина Vojta (1), который использует поведение сервера ImportExport.

Основной контроллер плагина DataImportExport наследует поведение импорта-экспорта от серверной части, которая находится в ImportExportController .

 class DataImportExport extends Controller
   {​​​​​​​
      public$implement = [
            'Backend.Behaviors.ImportExportController', 
      ];
       ...
   }
 

Это то поведение, которое имеет методы для экспорта данных в файл CSV. Тем не менее, если я хочу экспортировать в файл XLSX, я должен добавить соответствующие методы в это поведение, а именно в экспортирующий контроллер, переопределив некоторые из его существующих методов. Тем не менее, когда я делаю это внутри DataImportExport контроллера, это не работает … когда я пытаюсь / тестирую, процесс экспорта остается таким же, как и до этого, только с CSV…
Кажется, что невозможно переопределить / расширить поведение серверной части, а именно modulesbackendbehaviorsImportExportController.php .

Например, на DataimportExport контроллере я пытаюсь переопределить exportFromList() метод ImportExportController поведения, добавив код для экспорта XLSX —
пока никаких положительных изменений … как я ни пытаюсь.

 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
    BackendBehaviorsImportExportController::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.

Комментарии:

1. означает, что он не достигает exportFromList метода, можете ли вы попробовать dd() и проверить, входит ли он в ваш метод

Ответ №1:

может быть, вам стоит взглянуть на https://octobercms.com/plugin/vdomah-excel где вы можете импортировать и экспортировать файлы CSV и Excel? Документация очень хорошая, и я использую ее во многих проектах для импорта данных, и она работает хорошо.

с наилучшими пожеланиями, Лукас