Я ищу способ создания настраиваемой кнопки действий, которая позволяет мне создать новый DataObject с pre заполненный контент из другого объекта DataObject. В качестве простого примера: когда у меня есть электронное письмо и нажмите кнопку «ответ» в моем почтовом клиенте, я получаю новое окно с предварительно заполненным контентом из письма раньше. Мне нужна именно эта функция для моей кнопки. Эта кнопка должна появиться рядом с каждым объектом DataObject в GridField.Silverstripe 3.2: Как создать пользовательскую кнопку действий в CMS для создания нового объекта Data и его заполнения из другого.
Так что я знаю, как сделать кнопку и добавить его в мой GridField (->https://docs.silverstripe.org/en/3.2/developer_guides/forms/how_tos/create_a_gridfield_actionprovider/), и я знаю, как идти к новому DataObject:
Controller::curr()->redirect($gridField->Link('item/new'));
Я также обнаружил, что есть дублировать функции для DataObjects:
public function duplicate($doWrite = true) {
$className = $this->class;
$clone = new $className($this->toMap(), false, $this->model);
$clone->ID = 0;
$clone->invokeWithExtensions('onBeforeDuplicate', $this, $doWrite);
if($doWrite) {
$clone->write();
$this->duplicateManyManyRelations($this, $clone);
}
$clone->invokeWithExtensions('onAfterDuplicate', $this, $doWrite);
return $clone;
}
Может быть, это проще, чем я думаю, но в данный момент я просто не понимаю, как переписать это, чтобы получить то, что мне нужно. Может ли кто-нибудь дать мне подсказку?
Итак, вы не знаете, как совместить настраиваемое действие сетки и дублирующее действие? Правильно ли я понял вашу проблему? –
Да. Я мог бы использовать часть повторяющегося действия, но новый объект данных не должен быть добавлен в базу данных. Пользователь должен иметь возможность изменять содержимое перед сохранением и созданием нового объекта данных, поэтому необходимо перенаправить (или всплывающее окно) к еще не добавленному, но уже предварительно заполненному новому объекту данных. Это возможно? – iraira
Ах, хм, не знаю, но это будет полезно. Я постараюсь найти что-то, когда я нахожусь дома через несколько часов. –