Как загрузить огромное количество дочерних объектов как CSV в Silverstripe CMS?

Я работаю над проектом Silverstripe, который имеет отношение Batch> Item.

Партия может содержать до 50 000 наименований.

Вот как устанавливаются отношения:

class Item extends DataObject {

private static $has_one = array(
'Batch' => 'Batch'
);

class Batch extends DataObject {

private static $has_many = array(
'Items' => 'Item'
);

class BatchAdmin extends ModelAdmin {

private static $managed_models = array(
'Batch',
'Item'
);

Это изначально дает пользователю CMS возможность загрузки все Предметы как CSV от CMS.

Я пытаюсь решить две вещи:

  1. Как сделать так, чтобы при загрузке больших файлов не было ошибок из-за недостатка памяти / времени сценария и т. Д.

  2. Как добавить кнопку «Экспорт в CSV» в каждый пакет, который загружает только элементы из этого пакета в виде CSV?

1

Решение

Чтобы добавить Экспорт в CSV кнопка для Batch который экспортирует связанный Items мы добавляем GridFieldExportButton к пакетным полям CMS:

class Batch extends DataObject {

private static $has_many = array(
'Items' => 'Item'
);

public function getCMSFields() {
$itemsConfig = GridFieldConfig_RelationEditor::create();
$itemsConfig->addComponent(new GridFieldExportButton());

$itemsField = new GridField(
'Items',
'Items',
$this->Items(),
$itemsConfig
);

$fields = new FieldList(
$itemsField
);

return $fields;
}

}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]