如果您使用最新版本的 Magnolia 6.2,您可以使用 Ducaz035 提到的数据源。请参阅此处的文档:https://documentation.magnolia-cms.com/display/DOCS62/Select+field
对于以前的版本,这种方式是不可能的。您只能创建自己的字段,注册它并在实现中做任何您想做的事情。在您的情况下,只需覆盖 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