Skip to content

Секции пользователя (PRO)

Свои поля на форме пользователя MODX: телефон, компания, роль в бизнесе — всё, чего нет в стандартном профиле.

Механизм тот же, что у полей ресурса — секция с полями, — только контекст пользовательский.

Секция

НастройкаЧто делает
НазваниеЗаголовок вкладки или панели
КонтекстpbUser — секция относится к форме пользователя
Размещениеtab, panel или default
ОписаниеТекст над полями
ПозицияПорядок среди секций
ПраваКакие пользователи и группы её видят
ОпубликованаНеопубликованная секция не рисуется

Где лежат значения

В modx_user_attributes.extended — JSON-колонке профиля, там же, где MODX держит свои расширенные данные профиля.

Поля пользователя читаются через профиль, а не через пользователя

В MODX в самой строке пользователя почти ничего нет, кроме логина. email, fullname и все свои поля живут в профиле:

php
$user->email;              // пусто
$user->profile->email;     // значение

На этом спотыкаются все по одному разу. Список пользователей с пустыми ячейками — почти всегда это, а не отсутствующее значение.

Сохранение идёт после ядра, и это намеренно

Поля пишутся на OnUserSaveпосле того, как отработал процессор MODX.

Порядок не случаен. Процессор переписывает extended целиком из того, что прислала форма; запись до него означала бы запись в то, что ядро следом затрёт. Момент после — единственный, в который значение выживает.

Не «оптимизируйте» это на событие раньше

OnBeforeUserFormSave выглядит естественным местом и молча теряет все свои поля. Если добавляете собственный обработчик пользовательских данных — цепляйтесь к тому же событию и по той же причине.

Поля на фронте

Форма профиля на сайте — это обычный контроллер с формой: проверить и записать через профиль. Секция на форме менеджера и форма на сайте — два вида на одно и то же хранилище, отдельного механизма полей для фронта учить не нужно.

© PageBlocks 2019-present