Silverstripe 3.2: Как экспортировать поля базы данных только одного объекта данных в файл CSV?

Я знаю, что существует GridFieldExportButton, который экспортирует все данные GridField. Но мне нужна пользовательская кнопка, которая экспортирует все поля $db (или только некоторые из них) только ОДНОГО DataObject в файле CSV и загрузите его. Поэтому я хочу, чтобы эта кнопка находилась в области редактирования этого одного DataObject, а не для GridField, который показывает все объекты данных.

У меня уже есть кнопка, теперь мне нужна правильная функция. Кто-нибудь может мне помочь?


person iraira    schedule 14.01.2016    source источник
comment
Может быть, это поможет вам сформулировать решение? github.com/silverstripe/silverstripe-userforms/ блоб/мастер/код/ . В последней версии определяемой пользователем формы добавляется кнопка экспорта при просмотре отправленных материалов для экспорта только этих данных Dataobjects.   -  person Olli Tyynelä    schedule 14.01.2016
comment
Спасибо за ответы! Но, к сожалению, это не работает для меня, потому что у меня нет объекта данных с отношением has_many к полям, которые я хочу экспортировать. Я хочу просто экспортировать поля $db объекта данных. У вас есть идея, как это сделать?   -  person iraira    schedule 18.01.2016
comment
Да, я заметил, что он экспортирует отношения, но если он может экспортировать сложные вещи, предположительно, есть способ модифицировать его, чтобы также экспортировать нереляционные вещи :). К сожалению, у меня нет времени, чтобы сделать рабочий пример в то время.   -  person Olli Tyynelä    schedule 18.01.2016


Ответы (1)


Вы можете изменить поля, экспортируемые для любого DataObject в ModelAdmin со следующим:

МодельАдминистратор:

class MyModelAdmin extends ModelAdmin {

    ...

    static $managed_models = array(
        'MyDataObject'
    );

    ...

    public function getExportFields() {
        $modelClass = singleton($this->modelClass);

        return $modelClass->hasMethod('getExportFields')
            ? $modelClass->getExportFields()
            : $modelClass->summaryFields();
    }

    ...
}

MyDataObject:

class MyDataObject extends DataObject {

    ...

    public function getExportFields() {
        $exportFields = array(
            //Add all "db" fields here
        );
        return $exportFields;
    }

    ...
}

Если вы хотите, чтобы экспорт был прикреплен к кнопке в другом месте, я бы посоветовал вам изменить кнопку, чтобы она ссылалась на ссылку ModelAdmin экспорта CSV

person Barry    schedule 17.03.2016