Создание неограниченного количества значений кастомных полей пользователем на фронте

Приветствую, уважаемое сообщество!
Есть такая задача: необходимо дать возможность юзерам в личном кабинете создавать в своем профиле неограниченное количество адресов (или других полей, к примеру, бывшие места работы, тут не принципиально).

В принципе, через родной функционал UpdateProfile и связанных сниппетов получается создавать нужные данные при помощи такой формы:
<fieldset id = "addr_1" class = "addr_set" data-empty = "[[!+address_1.region]]">
                    <legend>Адрес 1</legend>
                    <label for = "region_1">Регион:</label>
                    <span class="error">[[+error.address_1.region]]</span>
                    <input type="text" name="address_1[region]" id="region_1" value="[[!+address_1.region]]" />
                    
                    <label for = "city_1">Город:</label>
                    <span class="error">[[+error.address_1.city]]</span>
                    <input type="text" name="address_1[city]" id="city_1" value="[[!+address_1.city]]"/>
                    
                    <label for = "address_1">Адрес:</label>
                    <span class="error">[[+error.address_1.addres]]</span>
                    <input type="text" name="address_1[address]" id="address_1" value="[[!+address_1.address]]" />
                    
                    <a href = "#" onclick="event.preventDefault()" class = "address_add_btn" data-id = "addr_2">Добавить ещё адрес</a>
                </fieldset>
Однако, встаёт вопрос, как дать возможность пользователю создавать неограниченное количество значений для этого поля. Буду благодарен за наводки, быть может, какие-то готовые или схожие решения имеются.
Dmitry
04 февраля 2018, 16:55
modx.pro
1
1 093
0

Комментарии: 9

Михаил
05 февраля 2018, 09:01
+1
Первое что приходит это скриптом по нажатию + добавлять поле. Они будут в массиве и этот массив в поле extended юзера. Ну как вариант
    Dmitry
    05 февраля 2018, 10:34
    0
    Ну да, это, вроде очевидная реализация.
    Вполне можно через JS создавать сколько угодно полей вида:
    <input type="text" name="address_1[region]" id="region_1" value="" />
    просто подменяя суффикс с порядковым номером.
    Вопрос тогда становится такой: каким образом потом на этой же странице вывести список всех кастомных полей, чтобы из можно было редактировать? Ведь для этого еще необходимо поставлять плейсхолдеры вида [[!+address_1.address]] в поле value.
      Михаил
      05 февраля 2018, 10:36
      0
      ну при разборе можно просто вывести поля с именами. Office кажется может из extended выводить сразу
        Dmitry
        05 февраля 2018, 11:06
        0
        ну при разборе можно просто вывести поля с именами.
        Как именно вывести, не подскажете, что имеете в виду?
          Dmitry
          05 февраля 2018, 11:09
          0
          В документации Office написано такое:
          Контроллер позволяет редактировать расширенные поля профиля пользователя, типа extended.some_field. Для этого вам нужно:

          Вывести их в форме
          <label for="extended.some_field">Какое-то поле</label>
          <input name="extended[some_field]" value="[[+extended.some_field]]" id="extended.some_field">
          То есть в форме все равно придётся руками выводить поля (инпуты) с плейсхолдерами. Как вывести инпуты для редактирования всех существующих полей — вот в чем вопрос :)
            Михаил
            05 февраля 2018, 11:12
            0
            ну не надо руками, можно неогрниченно вводить и скриптом. Он автоматически может их выводить в редактировании
              Dmitry
              05 февраля 2018, 11:27
              0
              Спасибо, посмотрю.
              Мысль ещё пришла такая: есть обычный сниппет Profile в составе пакета Login. Он может вывести JSON-массив всех полей, плейсхолдер extended. В принципе, можно создать простой сниппет, который получит этот массив, обработает его и выведет формы по шаблону.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    9