2017-03-29 3 views
1

J'ai besoin de définir un dialogue, composé de plusieurs champs de base (texte) imbriqués dans un champ commutable, lui-même imbriqué dans un champ composite, lui-même imbriqué dans un champ à plusieurs valeurs .Quelles classes de transformateur utiliser pour les formulaires Magnolia complexes

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

Cependant, je n'arrive pas à trouver la bonne combinaison de transformateurs, que je dois utiliser. Si vous utilisez les classes DelegatingXXTransformer correspondantes sur la zone multiValue et le champ composite, cela a presque fonctionné comme prévu, mais les transformateurs délégués masquent les boutons UI-controls (flèche vers le haut/haut) requis (voir image). Mais j'ai besoin de ces contrôles. J'ai besoin des informations que transformerClass doit utiliser pour n'importe quel élément, pour ne pas perdre les contrôles ui, mais être capable de gérer les champs imbriqués avec un niveau supérieur à deux. Pour résoudre ce problème?

enter image description here

yaml-config pertinente:

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://" 

Répondre

2

transformateurs Déléguer ne prennent pas en charge la commande des sous champs dans le champ à plusieurs. Cela est dû au fait qu'ils délèguent simplement la persistance à chaque champ individuel et n'ont aucun contrôle sur la façon dont ces champs seront conservés. Ces sous-champs n'ont alors aucune connaissance des champs environnants donc ils ne peuvent rien faire non plus. La seule solution consiste à utiliser des transformateurs autres que des transformateurs délégués, ou si aucun des transformateurs disponibles ne vous convient, écrivez le vôtre.

Jan

+1

Merci d'avoir clarifié :) – lunatikz