我有一个datagrid,允许用户将事件添加到事件页面.
在它上面,我有2个日期字段,因此他们可以指定开始和结束日期.这些字段不显示日期选择器,除非我在Sapphire/javascript(第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')
);
}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,DateField不显示日历弹出窗口,您必须将其配置为执行此操作.
申请所有DateFields :(您可以将此行放在getCMSFields方法的顶部)
DateField::set_default_config('showcalendar', true);
Run Code Online (Sandbox Code Playgroud)
应用于特定的DateField实例
return new FieldList(
DateField::create('StartDate', 'StartDate')->setConfig('showcalendar', true)
...
)
Run Code Online (Sandbox Code Playgroud)
使用DateField :: create方法而不是新的DateField允许您直接在一行中调用该类的方法,这很好.我认为这也是SS对象的最佳实践.
更新
在SilverStripe 3中,可以使用新的配置系统设置全局配置.
即.在你的配置YML中
DateField:
default_config:
showcalendar: true
Run Code Online (Sandbox Code Playgroud)
如果您使用的是DateTimeField,要使"每个实例"配置正常工作,您需要先调用getDateField:
$myDateTimeField->getDateField()->setConfig('showcalendar',true);
Run Code Online (Sandbox Code Playgroud)
如果您想在DateTimeField的Time字段中使用timepicker UI,则需要安装TimePicker模块,然后:
$myDateTimeField->setTimeField(
TimePickerField::create('StartTime[time]', '')
->addExtraClass('fieldgroup-field')
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3456 次 |
| 最近记录: |