Wie kann man die Anzahl der Elemente in Multifield in CQ5 begrenzen?

Ich habe die Site mit Day CQ5 entwickelt und war mit einem Problem konfrontiert. Ich erstelle eine Komponente und den Dialog dafür. Ich benutze im Dialog für die Komponente das Element "Mehrfeld", das mehrere Elemente "Pfadfeld" enthält. Wie kann ich eine bestimmte Anzahl von Elementen als "Pfadfeld" festlegen und die Schaltflächen "+" und "-" entfernen?

Antworten auf die Frage(5)

Lösung für das Problem

Standardmäßig können Sie die Anzahl der Elemente, die der Editor eingeben kann, nicht begrenzen. Um das Problem zu beheben, habe ich eine Überlagerung der Multifield.js unter erstellt

<code>/apps/cq/ui/widgets/source/widgets/form/MultiField.js
</code>

Ich habe eine Prüfung für eine 'Limit'-Eigenschaft hinzugefügt, die auf dem fieldConfig-Knoten unter dem Multifeld festgelegt ist. Wenn vorhanden und nicht Null, wird dies als die maximale Anzahl von Feldern verwendet, die ein Benutzer hinzufügen kann.

Ich möchte mich nicht mit Urheberrechtsproblemen befassen, indem ich das vollständige Overlay veröffentliche. Die von mir vorgenommenen Änderungen lauten jedoch wie folgt:

Fügen Sie im Konstruktor (Zeile 53) eine Prüfung hinzu, um den Wert von limit vom fieldConfig-Knoten abzurufen:

<code>if (!config.fieldConfig.limit) {
        config.fieldConfig.limit = "0";
}
</code>

Ändern Sie im Handler für die Schaltfläche "+" (Zeile 71) die Funktion wie folgt:

<code>if(config.fieldConfig.limit == 0 || list.items.getCount() <= config.fieldConfig.limit) {
    list.addItem();
} else {
    CQ.Ext.Msg.show({
        title: 'Limit reached',
        msg: 'You are only allowed to add ' + config.fieldConfig.limit + 
             ' items to this module',
        icon:CQ.Ext.MessageBox.WARNING,
        buttons: CQ.Ext.Msg.OK
    });
}
</code>

Anstatt die Schaltflächen zu entfernen, habe ich gerade ein Popup erstellt, um den Editor darüber zu informieren, dass "N die maximal zulässige Anzahl von Feldern ist".

Einfache Änderung, aber macht den Job! Hoffe, das ist von Nutzen.

 user214278606. Feb. 2015, 10:57
kannst du diese frage beantwortenstackoverflow.com/questions/28361998/…

indem ich die Schaltfläche Artikel hinzufügen entferne, sobald das Limit erreicht ist.

http://letsaem.blogspot.in/2015/12/add-limit-to-number-of-elements-in.html

Der Umsetzungsprozess ist jedoch:

Fügen Sie dem fieldConfig-Knoten die Eigenschaft limit ** (long) ** hinzuFügen Sie dem multifield xtype den Knoten listeners hinzu und fügen Sie die folgenden Listener hinzu.

removeditem:

<code>function(list) {
  var length = list.items.length;
  if (length <= list.fieldConfig.limit) {
    list.items.items[length - 1].show();
  }
}
</code>

vorher, hinzufügen:

<code>function(list, component, index) {

    var length = list.items.length;
    var addButton = list.items.items[length - 1];
    if (length == list.fieldConfig.limit) {
        addButton.hide();
    }
}
</code>

Wenn Sie nun ein Limit angeben: 3

Die Schaltfläche Artikel hinzufügen verschwindet nach dem Hinzufügen von 3 Artikeln

Die Schaltfläche Element hinzufügen verschwindet:

bin aber auf einen kleinen Trick gekommen. Zuerst füge ich die erforderliche Anzahl von Kinderelementen durch einen Dialog der Komponente hinzu. Und dann füge ich dem Element "multifield" die Eigenschaft "class" hinzu, zum Beispiel "sliderpanel-dialog-multifield". Dann füge ich in der Komponente CSS-style eine solche Konstruktion hinzu:

<code>.sliderpanel-dialog-multifield .x-btn{
  display: none;
}
</code>

".x-btn" ist eine Klasse, die die Schaltflächen in CQ5 verwendet. Danach werden die Schaltflächen ausgeblendet und Sie können keine Elemente im Multifeld hinzufügen oder entfernen. Ich habe einen weiteren Vorschlag, dass dieses Problem mit Hilfe von Listenern und Skripten gelöst werden kann, aber es wird schwieriger zu lösen sein, was ich oben zitiert habe. Ich habe mich bisher auf diese Variante konzentriert, aber wenn Sie andere Ideen haben, wäre ich sehr interessiert, sie zu kennen.

eispiel

Veranstaltung:beforeadd

Funktion:

<code>function(list,component,index) {
    if(this.fieldConfig.limit!=0) {
        if(this.fieldConfig.limit == (list.items.getCount()-1)) { 
            CQ.Ext.Msg.show(
                {title: 'Limit reached',  msg: 'You are only allowed to add '+this.fieldConfig.limit+' items to this module',icon:CQ.Ext.MessageBox.WARNING,buttons: CQ.Ext.Msg.OK}
            );;return false;
        }
    }
}
</code>

Voraussetzungen: Fügen Sie den Grenzwert zu fieldConfig von multifield hinzu.

Das Formular / Dialogfeld wird in einem ungültigen Zustand und fordert uns auf, die markierten Felder zu korrigieren ... aber alles ist korrekt.

Gibt es eine Möglichkeit, die Formularvalidierung erneut zu initialisieren?

Ihre Antwort auf die Frage