如何解决如何创建年份选择器下拉菜单
我想知道如何在木兰中创建年份选择器下拉字段。
理想情况下,它将列出从当前年份到过去10年的年份。
我是木兰的新手,我可以使用硬编码的选项创建“选择”字段,但这不是一个好方法,而且我很难创建动态选项。参见:
name: year
fieldType: select
multiselect: false
label: Year
options:
- name: 2020
label: 2020
selected: true
value: 2020
- name: 2019
label: 2019
selected: false
value: 2019
有人知道吗?
解决方法
如果使用最新版本的Magnolia 6.2,则可以使用 Ducaz035 所说的数据源。在此处查看文档:{{3}}
对于以前的版本,这种方式是不可能的。您只能创建自己的字段,进行注册,并在实现中做任何您想做的事情。就您而言,只需覆盖 getOptions 类。
public class YearSelectFieldFactory<D extends YearSelectFieldDefinition> extends SelectFieldFactory<D> {
public YearSelectFieldFactory(D definition,Item relatedFieldItem,UiContext uiContext,I18NAuthoringSupport i18nAuthoringSupport) {
super(definition,relatedFieldItem,uiContext,i18nAuthoringSupport);
}
public YearSelectFieldFactory(D definition,Item relatedFieldItem) {
super(definition,relatedFieldItem);
}
@Override
public List<SelectFieldOptionDefinition> getOptions() {
List<SelectFieldOptionDefinition> res = new ArrayList<>();
int currentYear = LocalDate.now().getYear();
for (int i = currentYear - 10; i <= currentYear; i++) {
SelectFieldOptionDefinition option = new SelectFieldOptionDefinition();
option.setName(String.format("Year%s",i));
option.setLabel(String.format("Year %s",i));
option.setValue(String.valueOf(i));
res.add(option);
}
res.get(0).setSelected(true);
return res;
}
}
YearSelectFieldDefinition 仅扩展了 SelectFieldDefinition 类。我们需要它来注册我们自己的字段类型。
要注册该字段,请向您的模块添加新的fieldType(或其他模块,没关系)。这是该字段的YAML定义:
your-module-name:
fieldTypes:
yearSelectField:
definitionClass: com.example.fields.YearSelectFieldDefinition
factoryClass: com.example.fields.YearSelectFieldFactory
现在,您可以在对话框定义中使用此字段。设置字段的类:
field:
name: year
class: com.example.fields.YearSelectFieldDefinition
,
您可以将数据源附加到该字段,并让该数据源使用Java为您提供月份。
文档中的示例:
listSelect:
label: Contacts
$type: listSelectField
datasource:
$type: jcrDatasource
workspace: contacts
describeByProperty: firstName
allowedNodeTypes:
- mgnl:contact
以及直接指向文档的链接: https://documentation.magnolia-cms.com/display/DOCS62/Select+field
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。