如何创建年份选择器下拉菜单

Posted

技术标签:

【中文标题】如何创建年份选择器下拉菜单【英文标题】:How to create year picker dropdown 【发布时间】:2020-09-24 12:01:53 【问题描述】:

我想知道如何在 Magnolia 中创建年份选择器下拉字段。

理想情况下,它会列出从当前年份到过去 10 年的年份。

我是 magnolia 的新手,我可以使用硬编码选项创建 Select 字段,但这不是很好的方法,我很难创建动态选项。见:

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

有人知道吗?

【问题讨论】:

【参考方案1】:

如果您使用最新版本的 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

【讨论】:

【参考方案2】:

您可以将数据源附加到该字段,并让数据源为您提供使用 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

【讨论】:

以上是关于如何创建年份选择器下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Jquery Date Picker 中添加请选择月份年份下拉菜单的选项?

JQuery UI Datepicker,在下拉菜单中颠倒年份的顺序

如何将滚轮选择器菜单更改为 React Native with Expo 中的下拉菜单?

Odoo[12.0] : 如何创建下拉菜单并在下拉菜单中显示所有菜单以及选择多个菜单

如何创建基于另一个下拉菜单的答案出现的下拉菜单

如何在引导选择选择器中为选项(下拉菜单)设置固定宽度