Вопрос по – Как ограничить количество элементов в мультиполе в CQ5?

7

Я разрабатываю сайт с Day CQ5 и столкнулся с проблемой. Я создаю компонент и диалог для него. Я использую в диалоговом окне элемент компонента «мультиполе», который содержит несколько элементов «путь к полю». Как можно задать конкретное количество элементов & quot; pathfield & quot; и удалите кнопки & quot; + & quot; и & quot; - & quot ;?

Ваш Ответ

5   ответов
5

Кажется, по умолчанию вы не можете ограничить количество элементов, которые может ввести редактор. Чтобы решить эту проблему, я создал наложение Multifield.js, расположенного на

/apps/cq/ui/widgets/source/widgets/form/MultiField.js

Я добавил проверку для свойства limit, установленного на узле fieldConfig в мультиполе. Если он присутствует и не равен нулю, он будет использовать это как максимальное количество полей, которые может добавить пользователь.

Не хочу вдаваться в проблемы с авторским правом, публикуя полный оверлей, но внесенные мной изменения были следующими:

В конструкторе (строка # 53) добавьте проверку, чтобы получить значение limit из узла fieldConfig:

if (!config.fieldConfig.limit) {
        config.fieldConfig.limit = "0";
}

В обработчике для кнопки «+» (строка # 71) измените функцию на следующую:

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
    });
}

Вместо того, чтобы удалять кнопки, я только что создал всплывающее окно, информирующее редактора о том, что «N - максимально допустимое количество полей».

Простое изменение, но делает работу! Надеюсь, что это полезно.

Вы можете ответить на этот вопрос ? / Stackoverflow.com вопросы / 28361998 / ... user2142786
0

но придумал небольшую хитрость. Сначала я добавляю необходимое количество дочерних элементов через диалог компонента. И тогда я добавляю свойство «класс» к элементу «мультиполе», например «sliderpanel-dialog-multifield». Затем я добавляю в компонент CSS-стиль такую конструкцию:

.sliderpanel-dialog-multifield .x-btn{
  display: none;
}

". x-btn" - это класс, который использует кнопки в CQ5. После этого кнопки будут скрыты, и вы не сможете добавлять или удалять элементы в мультиполе. У меня есть еще одно предположение, что эта проблема может быть решена с помощью слушателей и сценария, но решить ее будет сложнее, что я цитировал выше. Пока что я сосредоточился на этом варианте, но если у вас есть другие идеи, мне было бы очень интересно их узнать.

2

узлу. Наприме

Мероприятие:beforeadd

Function:

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;
        }
    }
}

Prerequisites: добавьте предельное значение к fieldConfig мультиполя.

0

где я реализовал эту функциональность, удалив кнопку «Добавить элемент» после достижения предела.

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

Как бы то ни было, процесс внедрения:

Добавить ограничение ** (long) ** свойство к fieldConfig узлу Добавьте узел слушателей в мультиполе xtype и добавьте следующих слушателей.

removeditem:

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

beforeadd:

function(list, component, index) {

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

Теперь, если вы дадите лимит: 3

Кнопка добавления элемента исчезнет после добавления 3 элементов

Кнопка добавления элемента исчезает:

0

форма / диалог переходит в недопустимое состояние, сообщая нам, чтобы исправить помеченные поля ... но все правильно.

Есть ли способ повторно инициализировать проверку формы?

Похожие вопросы