douhan9619
2016-07-13 15:01
浏览 63
已采纳

在Silverstripe CMS 3.1中的OptionsetField中创建自定义字段

I want to choose the type of my calendar events from some predefined values but also, create a new (custom) type if it's not listed.

So i have created the field in $db like so: 'Type' => 'Varchar', 'EventCustomType' => 'Varchar'

Then, in the getCMSFields() i have:

$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')
            )
        )
    );

enter image description here

The problem is that i don't know how to insert the label "Custom" before the Textareafield and style them in the same line.

Also, i'm not sure if i need a second field for the custom one. Can i insert the custom value inside "Type" field or validate it ?

Thanks for any suggestions

图片转代码服务由CSDN问答提供 功能建议

我想从某些预定义的值中选择日历事件的类型,还要创建一个新的(自定义)类型 如果它没有列出。

所以我在$ db中创建了这样的字段,如下所示: 'Type'=> 'varchar', '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')
)
)
); 
   
 
 

问题在于我不知道如何在Textareafield之前插入标签”Custom“并将它们设置在同一行中。 \ n

另外,我不确定我是否需要第二个字段用于自定义字段。 我可以在“类型”字段中插入自定义值还是验证它?

感谢您的任何建议

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • douzengjian1535 2016-07-13 15:31
    已采纳

    This could be achieved by having a separate field for "EventCustomType" and then using Display Logic to show it with something like...

    $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));
    

    As an alternative if you wanted to rescue This module then you could create this to save into one field as it is designed to do as you are asking... but it is with an error (last time I tried) so it is refernce only for now.

    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题