2

ユーザーがイベントページにイベントを追加できるデータグリッドがあります。

その上に、開始日と終了日を指定できる2つの日付フィールドがあります。Sapphire / javascriptのDateField.jsから1行コメントアウトしない限り、これらのフィールドには日付ピッカーが表示されません(12行目- if(!config.showcalendar) return;)。

コアを改ざんせずに日付ピッカーを表示させる方法はありますか?

<?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')
        );
    }
}
4

1 に答える 1

8

DateFieldは、デフォルトではカレンダーポップアップを表示しません。表示するように構成する必要があります。

すべてのDateFieldsに適用します:(この行をgetCMSFieldsメソッドの先頭に置くことができます)

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

特定のDateFieldインスタンスに適用します

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

newDateFieldの代わりにDateField::createメソッドを使用すると、そのクラスのメソッドを1行で直接呼び出すことができます。これは便利です。SSオブジェクトのベストプラクティスでもあると思います。

アップデート

SilverStripe 3では、新しい構成システムを使用してグローバル構成を設定できます。

すなわち。構成YMLで

DateField:
  default_config:
    showcalendar: true

DateTimeFieldを使用している場合、「インスタンスごと」の構成を機能させるには、最初にgetDateFieldを呼び出す必要があります。

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

DateTimeFieldのTimeフィールドでtimepickerUIが必要な場合は、TimePickerモジュールをインストールしてから、次の操作を行う必要があります。

$myDateTimeField->setTimeField(
    TimePickerField::create('StartTime[time]', '')
    ->addExtraClass('fieldgroup-field')
);
于 2012-09-16T23:43:51.007 に答える