2016-09-15 4 views
2

DataObject을 관리하기 위해 ModelAdmin을 확장 중이며 DataObject에 의해 관리되는 $has_many 관계가 있습니다. 다른 탭에서이 객체를 관리하고 싶습니다. 그러나 어떻게 추가 할 것인가는 분실했습니다. 내 기본 코드 :has_many 관계가있는 ModelAdmin

ApplicationAdmin.php :

class Applications extends ModelAdmin { 
    private static $menu_title = 'Applications'; 

    private static $url_segment = 'apps'; 

    private static $managed_models = array (
     'Application' 
    ); 
} 

Application.php

class Application extends DataObject { 
    private static $db = array(
     'Name' => "varchar" 
    ); 

    private static $has_many = array(
     'Documents' => 'Document', 
    ); 

    public function getCMSFields() { 
     $fields = FieldList::create(
      TextField::create('Name'), 
     ); 

     return $fields; 
    } 
} 

Document.php 기본적으로

class Document extends DataObject { 
    private static $db = array(
     'Title' => "varchar", 
    ); 

    private static $has_one = array(
     "Document" => "File", 
     "Application" => "Application" 
    ); 

    public function getCMSFields() { 
     $fields = FieldList::create(
      TextField::create('Title'), 
      $doc = new UploadField('Document') 
     ); 
     $doc->getValidator()->setAllowedExtensions(array('pdf', 'docx')); 

     return $fields; 
    } 
} 

나는이에 대한 문서를 관리하려면 Root.Documents 탭 아래 항목.

답변

2

GridField을 사용하면 ApplicationDocument 사이의 관계를 처리하고 원하는 경우 해당 필드를 자체 탭에 배치 할 수 있습니다. 예 :

# Application.php 
public function getCMSFields() { 

    $fields   = parent::getCMSFields(); 
    $nameField  = TextField::create('Name'); 
    $documentsField = GridField::create(
     'Documents', 
     'Documents', 
     $this->Documents(), 
     GridFieldConfig_RelationEditor::create() 
    ); 

    $fields->addFieldToTab(
     'Root.Main', 
     $nameField 
    ); 

    $fields->addFieldToTab(
     'Root.Documents', 
     $documentsField 
    ); 

    return $fields; 

} 

귀하의 코드는 a를 Document 클래스의 오타 (클래스 이름이 그 안에 .PHP가, getValidatorgetValidator()해야한다)를 포함, 그 클래스는 관계가 작동 할 수있는 $has_one = ['Application' => 'Application'];이 필요합니다.

+0

감사합니다. 나는'Root.Main'을위한'addFieldToTab'을 가지고 있지 않다면 여전히 내 필드가 나타납니다. 부모가 기본 항목을 작성 중이니까? – Rudiger

+1

@Rudiger 정확히, 당신은 DataObject.php에서'getCMSFields()'를 체크하고 그곳에서 자동으로 필드가 생성되는 곳까지의 추적을 따라갈 수 있습니다. 그것은'$ fields = parent :: getCMSFields();'를 사용하는 것이 좋은 습관이다. 모듈이 모든'DataObjects' 'cms 필드를 수정할 수있게 해주는 확장 훅을 가지고 있기 때문이다. –