2017-05-09 12 views
0

프로젝트 갤러리가있는 웹 사이트가 있고 사이트에 프로젝트 유형 전용 서브 페이지가 있습니다. 콘텐츠 관리자가 프로젝트 갤러리 항목을 선택하여 자신이 선택한 모든 서브 페이지에 표시 할 수있게하고 싶습니다. 서브 페이지는 많은 프로젝트 갤러리 항목을 가질 수 있으며 프로젝트 갤러리 항목은 하나 이상의 서브 페이지에 표시 될 수 있습니다.Silverstripe 3.4.0 - DataObject와 페이지 간의 관계 설정 - 데이터가 데이터베이스에 저장되지 않음

ProjectGalleryItem DataObject의 모든 프로젝트 이름 목록을 표시하는 Page.phpCheckboxSetField을 설정했습니다. 모든 하위 페이지의 별도 탭에 확인란 목록이 표시되어 있지만 선택한 값을 저장할 수 없습니다. 확인란을 선택하면 저장시 자동으로 선택이 취소됩니다. 로그 파일이나 콘솔에 오류가 표시되지 않습니다.

PageProjectGalleryItem 사이의 관계가 잘못된 것인지 궁금합니다. 여기

ProjectGalleryItem 코드입니다 :

<?php 

class ProjectGalleryItem extends DataObject 
{ 
    private static $db = array(
     'ProjectName'  => 'Varchar(250)', 
     'ProjectDescription' => 'Text', 
    ); 

    private static $has_one = array(
     'ProjectImage' => 'Image', 
    ); 

    private static $belongs_many_many = array(
     'Pages' => 'Page', 
    ); 

    private static $summary_fields = array(
     'ProjectName', 
     'ProjectDescription', 
    ); 
} 

class ProjectGalleryItemAdmin extends ModelAdmin { 
    private static $managed_models = 'ProjectGalleryItem'; 
    private static $url_segment = 'ProjectGalleryItems'; 
    private static $menu_title = 'Project Gallery Items'; 
} 

그리고 여기 Page.php 파일의 절반 : 그것은 문제처럼 나에게 보이는

<?php 

class Page extends SiteTree 
{ 
    private static $db = array(
     'BannerH1' => 'HTMLText', 
     'BannerSubH1' => 'HTMLText', 
     'H1' => 'varchar(250)', 
     'PageTitle' => 'varchar(250)', 
     'BottomContent' => 'HTMLText', 
     'StylizedList' => 'HTMLText', 
    ); 

    private static $has_one = array(
     'BannerImg' => 'Image', 
    ); 

    private static $has_many = array(
     'RotatorImages' => 'RotatorImage', 
    ); 

    private static $many_many = array(
     'ProjectGalleryItems' => 'ProjectGalleryItem' 
    ); 

    public function getCMSFields() 
    { 
     $fields = parent::getCMSFields(); 

     $fields->addFieldToTab("Root.Main", new TextField("H1"), "Content"); 
     $fields->addFieldToTab("Root.Main", new HTMLEditorField("BannerH1"), "Content"); 
     $fields->addFieldToTab("Root.Main", new HTMLEditorField("BannerSubH1"), "Content"); 
     $fields->addFieldToTab("Root.Main", new HTMLEditorField('BottomContent', "Bottom Content")); 
     $fields->addFieldToTab("Root.Main", new HTMLEditorField('StylizedList', "Stylized List"), "BottomContent"); 
     $fields->addFieldToTab('Root.Main', new TextField('PageTitle', 'Page Title'), 'MetaDescription'); 
     $fields->addFieldToTab("Root.Main", new UploadField('BannerImg', "Subpage Banner"), "Content"); 


     $metadataTab = $fields->findOrMakeTab('Root.Main.Metadata'); 
     $fields->removeByName('Metadata'); 
     $fields->addFieldToTab('Root.Main', $metadataTab); 

     $gridFieldConfig = GridFieldConfig_RecordEditor::create(); 

     $gridFieldConfig->addComponent(new GridFieldBulkUpload()); 
     $gridFieldConfig->addComponent(new GridFieldSortableRows('SortOrder')); 

     $gridFieldConfig->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
      // field from drawer class => label in UI 
      'ID' => 'ID', 
      'Title' => 'Title', 
      'Thumbnail' => 'Thumbnail', 
      'InternalURL.Link' => 'Internal URL', 
     )); 

     $gridfield = new GridField(
      "RotatorImages", 
      "Rotator Images", 
      $this->RotatorImages()->sort("SortOrder"), 
      $gridFieldConfig 
     ); 

     $fields->addFieldToTab('Root.Rotator Images', $gridfield); 

     $projects = DataObject::get('ProjectGalleryItem'); 

     if(!empty($projects)) 
     { 
      $map = $projects->Map('ID', 'ProjectName'); 

      $fields->addFieldToTab('Root.Projects', 
      CheckboxSetField::create(
       $name = "Projects", 
       $title = "Select Projects", 
       $source = $map 
      )); 
     } 

     return $fields; 
    } 
} 

답변

3

는 양식 필드 이름, 그것은 일치해야합니다 관계의 이름 CheckboxsetField::create()의 첫 번째 매개 변수는 ProjectGalleryItems이어야하며 Projects이 아니어야합니다.

+0

그게 문제였습니다. 그것을 깨닫지도 못했다 : \ –