При управлении Dataobject
с ModelAdmin
в Silverstripe 3 мне было интересно, как вы можете добавлять кнопки для пользовательских действий в представление списка, а также на страницу редактирования.Добавить кнопки для пользовательских действий в ModelAdmin
мне удалось добавить кнопку для действий на редактирования-страницы, установив ItemRequest
на ModelAdmin
в сек GridField
класса на код ниже:
class MyModelAdmin extends ModelAdmin
{
//...
public function getEditForm($id = null, $fields = null)
{
$form = parent::getEditForm($id, $fields);
$form
->Fields()
->fieldByName($this->sanitiseClassName($this->modelClass))
->getConfig()
->getComponentByType('GridFieldDetailForm')
->setItemRequestClass('MyModelGridFieldDetailForm_ItemRequest');
return $form;
}
}
MyModelGridFieldDetailForm_ItemRequest.php
class MyModelGridFieldDetailForm_ItemRequest extends GridFieldDetailForm_ItemRequest
{
function ItemEditForm()
{
$form = parent::ItemEditForm();
$formActions = $form->Actions();
$button = FormAction::create('myAction');
$button->setTitle('My Custom Action');
$button->addExtraClass('ss-ui-action-constructive');
$formActions->push($button);
$form->setActions($formActions);
return $form;
}
function myAction($data, $form)
{
//do things
$form->sessionMessage('My Action has been successful', 'good');
if ($this->gridField->getList()->byId($this->record->ID)) {
return $this->edit(Controller::curr()->getRequest());
} else {
$noActionURL = Controller::curr()->removeAction($data['url']);
Controller::curr()->getRequest()->addHeader('X-Pjax', 'Content');
return Controller::curr()->redirect($noActionURL, 302);
}
}
}
Вопрос в следующем:
Может ли я ve a кнопка для такое же действие в ModelAdmin
GridField
Listview? Так что рядом с ним появится редактирования и кнопка удаления:
что будет делать - спасибо :) Я как бы надеялся на какой-то магический метод, такой как getCMSActions(), который мне нужно было бы переопределить, чтобы изменить обе области ... –