哪些 transformerClasses 用于复杂的 Magnolia 表单

Which transformerClasses to use for complex Magnolia forms

我需要定义一个对话框,由嵌套在可切换字段中的几个基本字段(文本)组成,该字段本身嵌套在复合字段中,复合字段本身嵌套在多值字段中。

Multivalue 
  -> Composite
    -> Switchable
       -> textField1
       -> textField2
    -> generic textField (belonging to  composite, but not to switchable)

但是我无法设法找到我需要使用的 transformerClasses 的正确和工作组合。如果在多值和复合字段上使用相应的 DelegatingXXTransformer 类,它几乎按预期工作,但那些委托转换器隐藏了 required UI-控件(箭头 down/up) 按钮(见图)。 但我需要那些控件。 我需要将哪个 transformerClass 用于任何元素的信息,以免丢失 ui 控件,但仍然能够处理级别高于两个的嵌套字段。 无论如何要解决这个问题?

相关的 yaml-config:

form:
  tabs:
   - name: tabMain
     fields:
      - name: mainNav
        class: info.magnolia.ui.form.field.definition.MultiValueFieldDefinition
        transformerClass: info.magnolia.ui.form.field.transformer.multi.DelegatingMultiValueSubnodeTransformer
        field:
          name: composite
          class: info.magnolia.ui.form.field.definition.CompositeFieldDefinition
          transformerClass: info.magnolia.ui.form.field.transformer.composite.DelegatingCompositeFieldTransformer
          layout: vertical
          fields:
            - !include /module-ui/dialogs/common/link.yaml
            - !include /module-ui/common/link-title.yaml
            - !include /module-ui/dialogs/common/link-target.yaml
actions: !include /module-ui/dialogs/actions/default.yaml

link.yaml:

name: link
class: info.magnolia.ui.form.field.definition.SwitchableFieldDefinition
transformerClass: info.magnolia.ui.form.field.transformer.composite.SwitchableTransformer
options:
 - name: internal
   value: internal
   selected: true
 - name: external
   value: external
   fields:
    - name: internal
      class: info.magnolia.ui.form.field.definition.LinkFieldDefinition
      appName: pages
      identifierToPathConverter:
        class:    info.magnolia.ui.form.field.converter.BaseIdentifierToPathConverter
 - name: external
   class: info.magnolia.ui.form.field.definition.TextFieldDefinition
   defaultValue: "http://"

委托转换器不支持多字段中子字段的排序。这是因为他们只是将持久性委托给每个单独的字段,并且无法控制这些字段的持久化方式。那些子字段不知道周围的字段,因此它们也无能为力。

唯一的解决方案是使用委托转换器以外的其他方式,或者如果 none 开箱即用的可用转换器满足您的需要,请编写您自己的转换器。

一月