如何在optionGroups上设置defaultValue和/或选择带有Blossom的Magnolia CMS中的Fields?

时间:2017-04-25 09:35:32

标签: magnolia

设置defaultValue不适用于select - 字段或optionGroup - Magnolia CMS with Blossom中的字段。

@TabFactory("pages.properties.label")
public void pageProperties(UiConfig cfg, TabBuilder tab) {

    List<String> targetGroup = new ArrayList<>();
    targetGroup.add("Group A");
    targetGroup.add("Group B");

    List<String> menuTeaser = new ArrayList<>();
    menuTeaser.add("Teaser A");
    menuTeaser.add("Teaser B");

    tab.fields(
        cfg.fields.text("pageTitle").label("pages.properties.pageTitle.label").i18n()
            .description("pages.properties.pageTitle.description").i18n()
            .defaultValue("any value").i18n()   // works!
            .requiredErrorMessage("pages.properties.pageTitle.requiredErrorMessage").i18n()
            .required(),

        cfg.fields.select("targetGroup").label("pages.properties.targetGroup.label").i18n()
            .description("pages.properties.targetGroup.description").i18n()
            .options(targetGroup)
            .defaultValue(targetGroup.get(0)).i18n(),      // doesn't work!

        cfg.fields.optionGroup("menuTeaser").label("pages.properties.menuTeaser.label").i18n()
            .description("pages.properties.menuTeaser.description").i18n()
            .options(menuTeaser).i18n()
            .defaultValue(menuTeaser.get(0)).i18n()     // doesn't work!
            .required(),
    );
}

有趣的是,它适用于text - 字段。

如何为其他字段类型完成此操作?

2 个答案:

答案 0 :(得分:0)

您需要做的是在您要在选择中默认选择的选项上设置selected=true。这是普通的Magnolia代码。对于Blossom和TabBuilder,遗憾的是,它允许您将选项设置为仅字符串,而不是公开/允许传入整个SelectOption。 您需要扩展TabBuilder以创建自己的重载addSelect方法。现有的看起来像:

    public DialogSelect addSelect(String name, String label, String description, Collection<String> options) {
    try {
        DialogSelect select = DialogFactory.getDialogSelectInstance(
                context.getRequest(),
                context.getResponse(),
                context.getWebsiteNode(),
                null);
        select.setName(name);
        select.setLabel(label);
        select.setDescription(description);
        for (String option : options) {
            select.addOption(new SelectOption(option, option));
        }
        tab.addSub(select);
        return select;
    } catch (RepositoryException e) {
        throw new RuntimeRepositoryException(e);
    }
}

在您的网站中,您希望传递CollectionSelectOption个项目。要将项目标记为已选中,只需拨打mySelectOption.setSelected(true)

即可

或者,您可能希望将重载的代码作为补丁提供给Blossom本身。

HTH,

答案 1 :(得分:0)

我没有以简单的方式运行您的建议。非常感谢,无论如何。

最终我解决了这个问题:

$('.button_place').each(function(a, b) {
  $(this).append($('.button').eq(a).clone()).html()
})