2013-08-21 5 views
3

Silverstripe 3에서 DataobjectModelAdmin으로 관리 할 때 목록보기 및 편집 페이지에 사용자 지정 동작을위한 단추를 추가하는 방법이 궁금합니다.ModelAdmin에 사용자 지정 동작을위한 단추 추가

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); 
     } 
    } 

} 
:

나는 아래의 코드로 ModelAdminGridField 클래스에 ItemRequest을 설정하여 편집 페이지에 액션 버튼을 추가하기 위해 관리했습니다

질문은 다음과 같습니다.

같은 작업에 대한 버튼 ModelAdminGridField Listview? 는 편집 옆에 표시되는 버튼을 삭제 그래야 :

ModelAdmin GridField actions

답변

5

당신은 GridField_ColumnProviderGridField_ActionProvider을 구현 GridFieldComponent 자신을 작성하여이 작업을 수행 할 수 있습니다.

귀하의 경우에는 클래스를 복사하고 getColumnContent()을 자신의 GridField_FormAction으로 편집하고 handleAction()을 편집하여 마술을 할 수 있습니다.

+0

감사합니다. 나는 getCMSActions()와 같은 몇 가지 마법 메서드를 사용하기를 바랬습니다. 두 영역을 모두 바꾸려면 우선 재정의해야했습니다 ... –