2012-09-13 2 views
1

사용자가 이벤트 페이지에 이벤트를 추가 할 수있는 DataGrid가 있습니다.Silverstripe 3 : CMS 데이터 격자에서 날짜 선택 도구를 표시하는 방법

여기에 시작일과 종료일을 지정할 수 있도록 2 개의 날짜 입력란이 있습니다. 사파이어/자바 스크립트 (line 12 - if(!config.showcalendar) return;)에서 DateField.js의 행을 주석 처리하지 않으면이 필드에 날짜 선택 도구가 표시되지 않습니다.

날짜 선택 도구를 코어와 함부로 표시하지 않고 표시하려면 어떻게해야합니까?

<?php 
class Event extends DataObject{ 
    public static $db = array(
     'Title' => 'Varchar(255)', 
     'StartDate' => 'Date', 
     'EndDate' => 'Date', 
     'Summary' => 'Text', 
     'Content' => 'HTMLText' 
    ); 

    static $has_one = array( 
     'WhatsOnCategory' => 'WhatsOnCategory', 
     'EventImage' => 'Image' 
    ); 

    public static $summary_fields = array(
     'Title' => 'Title' 
    ); 

    public static $default_sort='StartDate'; 

    public function getCMSFields() { 
     return new FieldList(
      new TextField('Title', 'Title'), 
      new DateField('StartDate', 'StartDate'), 
      new DateField('EndDate', 'EndDate'), 
      new TextField('Summary', 'Summary'), 
      new HTMLEditorField('Content', 'Content'), 
      new UploadField('EventImage','Image') 
     ); 
    } 
} 

답변

7

DateField에는 기본적으로 캘린더 팝업이 표시되지 않으므로이를 구성해야합니다. 모든 DateFields에 대한

적용 :

DateField::set_default_config('showcalendar', true); 

는하여 DateField를 사용하여 특정하여 DateField 인스턴스

return new FieldList(
    DateField::create('StartDate', 'StartDate')->setConfig('showcalendar', true) 
    ... 
) 

에 적용 :: 방법을 만드는 (당신은 당신의 getCMSFields 방법의 상단에이 줄을 넣을 수 있습니다) new DateField 대신에 그 클래스의 메소드를 한 줄로 직접 호출 할 수 있습니다. SS 객체를 사용하는 것이 좋습니다.

업데이트

SilverStripe 3에서, 글로벌 구성이 새로운 구성 시스템을 사용하여 설정할 수 있습니다.

즉. 당신이에 timepicker의 UI를 원하시면

$myDateTimeField->getDateField()->setConfig('showcalendar',true); 

: 당신의 설정에서 YML는

DateField: 
    default_config: 
    showcalendar: true 

당신은 당신이 처음 getDateField를 호출 할 필요가 작업 "인스턴스 당"구성을 얻기 위해, DateTimeField를 사용하는 경우 DateTimeField의 시간 필드에 TimePicker module을 설치하고 다음을 입력해야합니다.

$myDateTimeField->setTimeField(
    TimePickerField::create('StartTime[time]', '') 
    ->addExtraClass('fieldgroup-field') 
); 
+0

이 이유가 작동하지 않는 이유가 있습니다. DateTimeField에 대한? –

+0

@kaiTaylor 나는 내 대답을 갱신/연장했다. ^^ –