我通过DataObject
管理ModelAdmin
我添加了自定义按钮,因为我想在添加项目时执行自定义操作。
class InventoryAdmin extends ModelAdmin {
public function getEditForm($id = null, $fields = null) {
$form = parent::getEditForm($id, $fields);
$listField = $form->Fields()->fieldByName($this->modelClass);
if ($gridField = $listField->getConfig()->getComponentByType('GridFieldDetailForm'))
$gridField->setItemRequestClass('InventoryFieldDetailForm_ItemRequest');
return $form;
}
}
class InventoryFieldDetailForm_ItemRequest extends GridFieldDetailForm_ItemRequest {
private static $allowed_actions = array (
'edit',
'view',
'ItemEditForm'
);
public function ItemEditForm() {
$form = parent::ItemEditForm();
$formActions = $form->Actions();
$formActions->removeByName('action_doSave');
if ($actions = $this->record->getCMSActions()) {
foreach ($actions as $action) {
$formActions->push($action);
}
}
return $form;
}
public function doAddInventoryItem($data, $form) {
return Controller::curr()->redirect($this->getToplevelController()->Link());
}
}
这适用于提交时,CMS会返回到父级,并且它会偏移大约15像素。主要问题是CMS UI从此一直没有响应,直到刷新。
我应该将哪些内容重定向到父ModelAdmin
?
答案 0 :(得分:1)
GridFieldDetailForm_ItemRequest
类具有函数getBacklink
,该函数应提供指向上一屏幕的链接。
然后,您可以使用getToplevelController
获取控制器并设置以下标头以强制刷新内容。
$controller = $this->getToplevelController();
$controller->getRequest()->addHeader('X-Pjax', 'Content'); // Force a content refresh
return $controller->redirect($this->getBacklink(), 302); //redirect back to admin section