我想从某些预定义值中选择日历事件的类型,但如果未列出,则创建新的(自定义)类型。
所以我在$ db中创建了这样的字段,如下所示: '类型' => '的Varchar&#39 ;, ' EventCustomType' => '的Varchar'
然后,在getCMSFields()中我有:
$f->addFieldsToTab("Root.Main", $eventType = new OptionsetField(
'Type',
_t('CalendarEvent.EVENTTYPE','Type'),
array (
'music' => _t('CalendarEvent.MUSIC','Music'),
'sport' => _t('CalendarEvent.SPORT','Sport'),
'drama' => _t('CalendarEvent.DRAMA','Drama'),
'custom' => TextField::create('EventCustomType','Event type')
)
)
);
问题是我不知道如何插入标签" Custom"在Textareafield之前,将它们放在同一条线上。
另外,我不确定我是否需要第二个字段用于自定义字段。我可以在#34; Type"中插入自定义值吗?现场或验证它?
感谢您的任何建议
答案 0 :(得分:2)
这可以通过为" EventCustomType"提供单独的字段来实现。然后使用Display Logic来显示类似......
$eventType = OptionsetField::create(
'Type',
_t('CalendarEvent.EVENTTYPE','Type'),
array (
'music' => _t('CalendarEvent.MUSIC','Music'),
'sport' => _t('CalendarEvent.SPORT','Sport'),
'drama' => _t('CalendarEvent.DRAMA','Drama'),
'custom' => _t('CalendarEvent.CUSTOM','Custom'),
)
);
$fEventCustomType = TextField::create('EventCustomType','Event type')
->displayIf('Type')->isEqualTo('custom');
$f->addFieldsToTab("Root.Main", array($eventType,$fEventCustomType));
作为替代方案,如果您想要解救This module,那么你可以创建它以保存到一个字段中,因为它的设计就像你要求的那样...但是它有错误(我上次试过)所以现在只是参考。
答案 1 :(得分:1)
最后,我已经用不同的字段想出来了:
$eventType = OptionsetField::create(
'Type',
_t('CalendarEvent.EVENTTYPE','Type'),
array (
'music' => _t('CalendarEvent.MUSIC','Music'),
'sport' => _t('CalendarEvent.SPORT','Sport'),
'drama' => _t('CalendarEvent.DRAMA','Drama'),
'custom' => _t('CalendarEvent.CUSTOM','Custom'),
)
);
$customEventType = TextField::create('EventCustomType','Custom type');
$f->addFieldsToTab("Root.Main", array($eventType,$customEventType));
和jQuery:
$('#Root_Main').entwine({
onmatch: function(){
var $tab = this.closest('.tab');
var $eventType = $tab.find('ul.eventType');
var $customType = $tab.find('.customEventType').hide();
if($eventType.find('input:checked').val() == 'custom'){
$customType.show();
}
$eventType.find('input').change(function(){
if($(this).val() == 'custom'){
$customType.show();
}else{
$customType.hide();
}
});
}
});