Дополнительные поля пользователя без редактирования системных файлов
Благодаря этой заметке я смог добавить несколько новых полей, например orgname. И в админке они успешно сохраняются.
Но, как и у некоторых комментаторов этой ветки, эти поля никак не выводятся. Ни при использовании {$_modx->user.orgname} ни просто в чанке Office.
Я нашел вариант как сделать чтобы эти поля работали — редактировать системные файлы, но…
Я нашел вариант как сделать чтобы эти поля работали можно изменить файлы /core/model/schema/modx.mysql.schema.xml /core/model/modx/mysql/moduser.map.inc.php, но это же не правильно и при обновлении они могут затереться.
Так вот вопрос: Как еще можно указать MODX'у, что нужно подключить эти поля, и чтобы они участвовали во всех процессах, без редактирования системных файлов?
Спасибо
Но, как и у некоторых комментаторов этой ветки, эти поля никак не выводятся. Ни при использовании {$_modx->user.orgname} ни просто в чанке Office.
Я нашел вариант как сделать чтобы эти поля работали — редактировать системные файлы, но…
Я нашел вариант как сделать чтобы эти поля работали можно изменить файлы /core/model/schema/modx.mysql.schema.xml /core/model/modx/mysql/moduser.map.inc.php, но это же не правильно и при обновлении они могут затереться.
Так вот вопрос: Как еще можно указать MODX'у, что нужно подключить эти поля, и чтобы они участвовали во всех процессах, без редактирования системных файлов?
Спасибо
Комментарии: 8
То есть я на onmodxinit вешаю
$modx->map['modUser']['fields']['orgname'] = '';
$modx->map['modUser']['fieldMeta']['orgname'] = [
'dbtype' => 'varchar',
'precision' => '255',
'phptype' => 'string',
'null' => true,
'default' => ''
];
и далее поле все равно не доступно
В общем это решение мне не нравится, но оно работает
switch ($modx->event->name) {
case "OnMODXInit":
$fields = [
'ur' => 0,
'orgname' => '',
'inn' => '',
];
$fieldsMeta = [
'ur' => array(
'dbtype' => 'tinyint',
'precision' => '1',
'phptype' => 'boolean',
'attributes' => 'unsigned',
'null' => false,
'default' => 0,
),
'orgname' => array(
'dbtype' => 'varchar',
'precision' => '255',
'phptype' => 'string',
'null' => false,
),
'inn' => array(
'dbtype' => 'varchar',
'precision' => '255',
'phptype' => 'string',
'null' => false,
),
];
$modx->map['modUser']['fields'] = array_merge($modx->map['modUser']['fields'], $fields);
$modx->map['modUser']['fieldMeta'] = array_merge($modx->map['modUser']['fieldMeta'], $fieldsMeta);
if ($modx->user->get('id') > 0) {
if ($user = $modx->getObject('modUser', $modx->user->get('id'))) {
$modx->user->set('orgname', $user->get('orgname'));
$modx->user->set('ur', $user->get('ur'));
$modx->user->set('inn', $user->get('inn'));
}
}
break;
}
Установите это и проблема решится сама собой
ExtraFields тебе в помощь.
Круто. Посмотрю тогда код компонента как там это реализовано.
Скучно тебе, да?
Ну так хочется понять почему не работает)
Посмотрел. Там используется класс moduserprofile, а не moduser. мб в это дело) А так выполняется абсолютно такой же код…
Посмотрел. Там используется класс moduserprofile, а не moduser. мб в это дело) А так выполняется абсолютно такой же код…
Тоже самое написал. Но сейчас увидел ссылка не вставилась)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.