[Office] Версия 1.3.2 вложенные extended поля

Представляю вам новую версию Office, компонента для работы с пользователями на сайте.

Очень много вопросов возникает с extended полями, которые в этой версии были расширены, так что я решил написать максимально понятные примеры по их использованию.

Итак, все неразрешённые поля в профиле пользователя запрещены для заполнения. Они просто обнуляются при обработке формы, поэтому, первым делом, вам нужно разрешить extended в параметре &profileFields:
[[!OfficeProfile?
	&profileFields=`extended`
]]

Там же вам нужно указывать и все остальные поля, которые вы разрешаете менять своим пользователям:
[[!OfficeProfile?
	&profileFields=`extended,username,fullname,email`
]]


Если вы хотите ограничить максимальную длину значения, нужно указать число через двоеточие:
[[!OfficeProfile?
	&profileFields=`extended:50,username:30,fullname:100,email`
]]

Обратите внимание, что ограничение длины для поля extended влияет на все его вложенные поля. Кстати, вот как их нужно добавлять в форму:
<div class="form-group">
	<label class="col-sm-2 control-label">Название поля</label>
	<div class="col-sm-10">
		<input type="text" name="extended[field][nested]" value="[[+extended.field.nested]]" class="form-control" />
		<p class="help-block message"></p>
	</div>
</div>

То есть, name у поля ввода должен быть массивом HTML формы:
name="extended[field][nested]"
А значение, которое подставится при загрузке формы — строка-плейсхолдер MODX:
value="[[+extended.field.nested]]"

Финальный штрих — вы можете указать все возможные вложенные поля с индивидуальными ограничениями длины:
[[!OfficeProfile?
	&profileFields=`extended[field][nested:50],extended[field][nested2:10],extended[field2]`
]]

И даже требовать их обязательного заполнения:
[[!OfficeProfile?
	&profileFields=`extended[field][nested:50],extended[field][nested2:10],extended[field2]`
	&requiredFields=`extended[field][nested],extended[field][nested2],extended[field2]`
]]

Все вложенные поля проходят проверку на нехорошие символы. Из них вырезаются HTML теги, скрипты и прочие попытки порчи вашего сайта.

Новая версия уже доступна в репозитории, можно обновляться.
Василий Наумкин
26 ноября 2015, 07:25
modx.pro
7
4 227
+9

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

Василий Столейков
26 ноября 2015, 17:03
0
+ За ограничители длины спасибо, не знал.
Чекбоксы в этой версии не сохраняются по умолчанию? В смысле мне не удалять отдельный плагин на сохранение чекбоксов?
    Василий Наумкин
    26 ноября 2015, 17:12
    0
    Ну если вдруг поменяли стандарты HTML и пустые чекбоксы стали отправляться из форм — тогда да, сохраняются.

    Но я, что-то в этом сомневаюсь.
      Василий Столейков
      26 ноября 2015, 17:15
      0
      Ок, спасибо, это я хотел узнать.
      Просто думал вдруг ты добавил что-то типа плагина, который решает эту проблему, чтобы не дублировать мой.

      А extended-поля пользователя — это действительно крутая тема, безграничный простор для фантазии на все случаи жизни. Поэтому и вопросы возникают…
        Василий Наумкин
        26 ноября 2015, 17:23
        0
        А как его добавить?

        То есть, что проверять, если я не знаю, что должно быть в форме? Пустые чекбоксы-то не отправляются, их как-бы и нет на стороне сервера.

        Так что, без плагина пока никак.
      Wassi Wassinen
      23 февраля 2016, 01:41
      0
      Василий, привет. Воспользовался возможностью работать с extended полями пользователя и встретился с проблемой — не могу их вывести на страницах пользователя (страницы работают как на modx.pro). Можешь подсказать, как это сделать? ID пользователя могу подставлять плейсхолдером [[+id]].
        Wassi Wassinen
        23 февраля 2016, 02:25
        0
        Решил вот так:

        <?php
        $user = $modx->getObject('modUser', $input);
        $profile = $user->getOne('Profile');
        $extended = $profile->get('extended');
        if($extended[$options]) {
            return $extended[$options];
        }
        else {
            return ' ';
        }
      Максим Кузнецов
      26 ноября 2015, 17:25
      0
      Здорово, спасибо.)

      Особенно удобно на фоне старых версий, когда вложенные доп. поля было невозможно подключать в office и все приходилось валить в одну кучу.

      //Прямо бум какой-то на апдейты office в последнее время.
        Василий Наумкин
        26 ноября 2015, 17:27
        +4
        Они давно были, просто не поддерживали вложенность — теперь и с этим разобрался.

        А бум, действительно имеет место быть:
        Закрыл исходники → выросли продажи → больше запросов в поддержке → больше обновлений.

        Вот так закрытие исходников улучшило качество дополнений. Парадокс.
        Николай Савин
        26 ноября 2015, 19:28
        0
        «extended[field][nested]»
        Не совсем понял что за nested?
        Это для элементов с множественными значениями типа чекбоксов?
          Василий Наумкин
          26 ноября 2015, 19:32
          0
          Это пример для работы со вложенными массивоми, как на первой картинке.

          nested — это «вложенный», по-английски.
            Николай Савин
            26 ноября 2015, 19:35
            0
            Таак можно? Не знал.
              Василий Наумкин
              26 ноября 2015, 19:37
              0
              В админке так всегда можно было, а в Office — с этой версии.

              О чём и анонс.
                Николай Савин
                26 ноября 2015, 19:43
                0
                Так я не понял, если я использую checkbox и имею несколько помеченных значений, такой подход позволит записать в extended[name] значения extended[name] [value1], extended[name] [value2]?
                  Василий Наумкин
                  26 ноября 2015, 19:45
                  0
                  По идее — да, если у чекбоксов будет name=«extended[name]» и разные значения, то на сервер уйдёт массив с ними и он должен сохраниться.

                  Обновляйся и проверяй.
                    Николай Савин
                    26 ноября 2015, 19:47
                    0
                    Вот спасибо за такую логику. А то я велосипеды писал, собирая помеченные чекбоксы в hidden
                    Илья Уткин
                    26 ноября 2015, 19:56
                    +2
                    Надо так:
                    <label>
                      <input type="checkbox" name="extended[name][]" value="first">
                      Первый
                    </label>
                    <label>
                      <input type="checkbox" name="extended[name][]" value="second">
                      Второй
                    </label>
                    <label>
                      <input type="checkbox" name="extended[name][]" value="third">
                      Третий
                    </label>

                    Тогда в name запишется массив.

                    Например, если выбрали первый и третий, то массив будет такой:
                    array('first','third');
                      Николай Савин
                      26 ноября 2015, 20:28
                      0
                      Спасибо Илья. Я понял логику.
                        Игорь
                        17 июня 2020, 15:39
                        0
                        А у меня так ничего и не получается с чекбоксами…
                        Хочу вывести 2 чекбокса в личном кабинете на странице профиля через extendedfields:
                        <input class="form-checkbox" type="checkbox" id="extended.mailyes" name="extended[mailyes]" value="[[+extended.mailyes]]">
                        <input class="form-checkbox" type="checkbox" id="extended.smsyes" name="extended[smsyes]" value="[[+extended.smsyes]]">
                        В вызове сниппета добавил эти поля (extended[smsyes],extended[mailyes]).
                        Как сохранять значения отмеченных чекбоксов? (т.е. запоминать отмечена галочка или нет).
                        Пробовал также через скрытое поле:
                        <input type="hidden" name="extended[smsyes]" value="extended[smsyes]" class="form-control" id="extended.smsyes">
                        <input class="form-checkbox" type="checkbox" id="-extended.smsyes-" name="extended[smsyes]" value="да">
                        После нажатия кнопки «Сохранить» value в скрытом инпуте меняется на «да», но после перезагрузки страницы — снова value=«extended[smsyes]»… что-то я делаю не так, но что именно не могу понять (
                        И еще, как потом вывести эти же чекбоксы на странице регистрации?
            but1head
            27 ноября 2015, 00:04
            0
            А что с регистрацией в доп.поля? Т.е. во время регистрации кроме стандартных полей использовать расширенные.
              Василий Наумкин
              27 ноября 2015, 02:49
              0
              Там всё как и раньше, можно использовать только email, username, fullname и password.

              Office предназначен для быстрой регистрации.
                TITAN-UZ
                30 ноября 2015, 10:30
                -1
                Василий верните добро в github PLZ
                  Василий Наумкин
                  30 ноября 2015, 10:31
                  0
                  Чего?
                    TITAN-UZ
                    30 ноября 2015, 10:35
                    -1
                    Из гитхаба убрали контент!
                    Если ест возможность верните на общий доступ
                      Воеводский Михаил
                      30 ноября 2015, 10:39
                      0
                      bezumkin.ru/sections/blog/3047/

                      Хотя это наглость, конечно, просить исходники платных компонентов у автора, чтобы их не покупать. Уж хотя бы не озвучивайте, что платить не планируете.
                        TITAN-UZ
                        30 ноября 2015, 11:41
                        -1
                        До этого бил в доступе после инцидента убрали.
              Марк Валерич
              05 февраля 2016, 13:15
              0
              Василий, добрый день.
              Забил группу полей extended, все нормально отрабатывает в фронте, но при открытии пользователя в админке,
              страница не грузится с профилем — консоль показала следующее, что с этим делать?
              Ext.onReady(function() {
                  MODx.load({
                      xtype: "modx-page-user-update"
                      ,user: "9"
                      
                      ,extendedFields: тут консоль показывает крест красный
                  }); 
              });
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                27