У нас есть проект Silverstripe 4.x, в котором пользовательские действия были добавлены в Gridfield
s.
Вот пример:
public function getColumnContent($gridField, $record, $columnName)
{
$field = GridField_FormAction::create(
$gridField,
'CustomAction'.$record->ID,
'Update Record',
"updaterecord",
['RecordID' => $record->ID]
);
$field->addExtraClass('btn btn-primary font-icon-edit-list');
return $field->Field();
}
public function getActions($gridField)
{
return ['updaterecord'];
}
public function handleAction(GridField $gridField, $actionName, $arguments, $data)
{
if ($actionName !== 'updaterecord') {
return;
} else {
$item = $gridField->getList()->byID($arguments['RecordID']);
if(!$item && !$item->DataSourceID) return;
$params = [
'id' => $item->DataSourceID,
'recordHash' => $item->Hash
];
Controller::curr()->redirect('/datarecord?' . http_build_query($params));
}
}
Кнопки перенаправляют на настраиваемые формы, которые мы создали, поскольку нам нужны функции, недоступные в ModelAdmin - например, https://github.com/silverstripe/silverstripe-multiform
Однако это перезаписывает URL-адрес /admin/
пользовательской формой /datarecord?
- что не является большим пользователем опыта.
В идеале мы бы хотели, чтобы настраиваемая форма открывалась либо на другой вкладке браузера (например, target="form"
), либо в модальном.
Каков наилучший подход для создания любого из них поведение?