Allows for large data set exports from a GridField
. By using an asynchronous job queue, we avoid
running out of PHP memory or exceeding any maximum execution time limits.
The exact limitations of a standard GridField
export vary based on the server configuration,
server capacity and the complexity of the exported DataObject
.
As a rough guide, you should consider using this module
when more than 1000 records need to be exported. The module should be able to export
10,000 records on a standard server configuration within a few minutes.
- SilverStripe 4.0+
- The queuedjobs module
Note: For SilverStripe 3.x, please use the 1.x release line.
To install run composer require silverstripe/gridfieldqueuedexport
.
Since this component operates on a GridField
, you can simply use it's addComponent()
API.
$gridField = new GridField('Pages', 'All pages', SiteTree::get())
$config = $gridField->getConfig();
$config->addComponent(new GridFieldQueuedExportButton('buttons-after-left'));
If you want to replace the GridFieldExportButton
created by the default GridField configuration,
you also need to call removeComponentsByType()
.
// Find GridField
$gridField = $fields->fieldByName('MyGridField');
$config = $gridField->getConfig();
// Add new component
$oldExportButton = $config->getComponentByType('GridFieldExportButton');
$config->addComponent($newExportButton = new GridFieldQueuedExportButton('buttons-after-left'));
// Set Header and Export columns on new Export Button
$newExportButton->setCsvHasHeader($oldExportButton->getCsvHasHeader());
$newExportButton->setExportColumns($oldExportButton->getExportColumns());
// Remove original component
$config->removeComponentsByType('GridFieldExportButton');
Note: This module is preconfigured to work with the silverstripe/userforms submission CSV export.
- silverstripe/queuedjobcsvexport: General purpose CSV exports through queuedjobs (without a dependency on GridField)