Сергей Кузьмин

Сергей Кузьмин

С нами с 10 июля 2017; Место в рейтинге пользователей: #1560
Сергей Кузьмин
20 ноября 2020, 23:46
0
Не правильно вам написал. Обратите внимание на массив $data. Вы задаёте user_id => 0, а должно быть id зарегистрированного пользователя. Тогда можно получить его имя.
Сергей Кузьмин
20 ноября 2020, 21:40
0
В Вашем коде неоткуда взяться имени подписчика. У Вас берется е-майл из массива $emails, а там только почтовые ящики. Вобщем Вам надо массив $emails передавать не только е-мал но и name. Ну и в $data тоже добавить переменную name. Как то так.
Сергей Кузьмин
01 февраля 2019, 17:19
0
Спасибо буду разбираться.
Сергей Кузьмин
20 ноября 2017, 22:44
0
Сделай проще: в системных настройках сайта, для страницы 403 (доступ запрещен), укажи id страницы с формой регистрации (авторизации), а на сайте в нужном месте, просто оставь ссылку на страницу личного кабинета. При переходе по ссылке авторизованные пользователи попадут в лк, а пользователи не авторизованные (у которых нет доступа к группе ресурсов) попадут на 403 страницу -> страницу авторизации (регистрации).
Сергей Кузьмин
20 ноября 2017, 18:02
0
А logoutTpl разве не форма для выхода из лк?
На вскидку: modzone.ru/blog/2016/01/05/check-user-authorization/
Сергей Кузьмин
13 июля 2017, 18:44
0
Вот и не знаю в чем проблема… Но для меня это на данный момент не принципиально. Через фронтенд данные записываются и извлекаются, в бд хранятся. Редактирование их в админке,
не критично. Повторюсь сам метод мне понятен, прост и мне вполне подходит. Спасибо за него
Павлу.
Сергей Кузьмин
13 июля 2017, 18:00
0
Сразу предупреждаю, что это мой первый сниппет, сильно прошу не пинать…
часть снипета с записью в поля:
$profile = $modx->user->getOne('Profile');
$profile->set('cardid', $cardrefid);
$profile->set('unqcardrefid', $unqcardrefid);
$profile->set('cardholder', $cardholder);
$profile->set('bin', $bin);
$profile->set('last4digit', $last4digit);
$profile->set('expyear', $expyear);
$profile->set('expmonth', $expmonth);
$profile->save();

как то так
Сергей Кузьмин
13 июля 2017, 15:28
0
Я наверно не правильно выразился. С созданием все в порядке. После создания пользователя поля в админке видны и редактируются нормально. Но после выполнения скрипта с записью в эти поля, они пропадают из админки.
Сергей Кузьмин
12 июля 2017, 19:30
0
Ну или через админку ручками забивать.
Сергей Кузьмин
12 июля 2017, 19:29
0
Проблема в том что User Import не знает о существовании добавленных полей. Импортировать наверно можно через самописный плагин заточенный на работу с твоими полями.
Сергей Кузьмин
11 июля 2017, 18:27
0
switch ($modx->event->name) {
    case "OnMODXInit":
        $map = array(
            
            'modUserProfile' => array(
                'fields' => array(
                    'firstname' => '',
                    'secondname' => '',
                    'cardid' => '',
                    'last4digit' => '',
                    'cardtype' => '',
                    'unqcardrefid' => '',
                    'cardholder' => '',
                    'bin' => '',
                    'expyear' => '',
                    'expmonth' => '',
                ),
                'fieldMeta' => array(
                    'firstname' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'secondname' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'cardid' => array(
                        'dbtype' => 'varchar',
                        'precision' => '50',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'last4digit' => array(
                        'dbtype' => 'varchar',
                        'precision' => '25',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'cardtype' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'unqcardrefid' => array(
                        'dbtype' => 'varchar',
                        'precision' => '100',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'cardholder' => array(
                        'dbtype' => 'varchar',
                        'precision' => '255',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'bin' => array(
                        'dbtype' => 'varchar',
                        'precision' => '100',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'expyear' => array(
                        'dbtype' => 'varchar',
                        'precision' => '100',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                    'expmonth' => array(
                        'dbtype' => 'varchar',
                        'precision' => '100',
                        'phptype' => 'string',
                        'null' => false,
                    ),
                ),
            ),
        );

        foreach ($map as $class => $data) {
            $modx->loadClass($class);

            foreach ($data as $tmp => $fields) {
                if ($tmp == 'fields') {
                    foreach ($fields as $field => $value) {
                        foreach (array('fields', 'fieldMeta', 'indexes') as $key) {
                            if (isset($data[$key][$field])) {
                                $modx->map[$class][$key][$field] = $data[$key][$field];
                            }
                        }
                    }
                } elseif ($tmp == 'composites' || $tmp == 'aggregates') {
                    foreach ($fields as $alias => $relation) {
                        if (!isset($modx->map[$class][$tmp][$alias])) {
                            $modx->map[$class][$tmp][$alias] = $relation;
                        }
                    }
                }
            }
        }
        break;
    
    case "OnUserFormPrerender":
        if (!isset($user) || $user->get('id') < 1) {
            return;
        }

        if (!$modx->getCount('modPlugin', array('name' => 'AjaxManager', 'disabled' => false))) {
            
            $data['firstname'] = htmlspecialchars($user->Profile->firstname);
            $data['secondname'] = htmlspecialchars($user->Profile->secondname);
            $data['cardid'] = htmlspecialchars($user->Profile->cardid);
            $data['last4digit'] = htmlspecialchars($user->Profile->last4digit);
            $data['cardtype'] = htmlspecialchars($user->Profile->cardtype);
            $data['unqcardrefid'] = htmlspecialchars($user->Profile->unqcardrefid);
            $data['cardholder'] = htmlspecialchars($user->Profile->cardholder);
            $data['bin'] = htmlspecialchars($user->Profile->bin);
            $data['expyear'] = htmlspecialchars($user->Profile->expyear);
            $data['expmonth'] = htmlspecialchars($user->Profile->expmonth);

            $modx->controller->addHtml("
                <script type='text/javascript'>
                    Ext.ComponentMgr.onAvailable('modx-user-tabs', function() {
                        this.on('beforerender', function() {
                            // Получаем колонки первой вкладки
                            var leftCol = this.items.items[0].items.items[0].items.items[0];
                            

                            // Добавляем новое поле в левую колонку 4ым по счёту полем (перед полем 'Email')
                            leftCol.items.insert(4, 'modx-user-firstname', new Ext.form.TextField({
                                id: 'modx-user-firstname',
                                name: 'firstname',
                                fieldLabel: 'Имя',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['firstname']}',
                            }));
                            
                            leftCol.items.insert(5, 'modx-user-secondname', new Ext.form.TextField({
                                id: 'modx-user-secondname',
                                name: 'secondname',
                                fieldLabel: 'Фамилия',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['secondname']}',
                            }));
                            
                            leftCol.items.insert(6, 'modx-user-cardid', new Ext.form.TextField({
                                id: 'modx-user-cardid',
                                name: 'cardid',
                                fieldLabel: 'card - ref - id',
                                xtype: 'textfield',
                                anchor: '50%',
                                maxLength: 50,
                                value: '{$data['cardid']}',
                            }));
                            
                            leftCol.items.insert(7, 'modx-user-last4digit', new Ext.form.TextField({
                                id: 'modx-user-last4digit',
                                name: 'last4digit',
                                fieldLabel: 'Последние 4 цифры карты',
                                xtype: 'textfield',
                                anchor: '25%',
                                maxLength: 25,
                                value: '{$data['last4digit']}',
                            }));
                            
                            leftCol.items.insert(8, 'modx-user-cardtype', new Ext.form.TextField({
                                id: 'modx-user-cardtype',
                                name: 'cardtype',
                                fieldLabel: 'Тип карты',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['cardtype']}',
                            }));
                            
                            leftCol.items.insert(9, 'modx-user-unqcardrefid', new Ext.form.TextField({
                                id: 'modx-user-unqcardrefid',
                                name: 'unqcardrefid',
                                fieldLabel: 'unq-card-ref-id',
                                xtype: 'textfield',
                                anchor: '50%',
                                maxLength: 100,
                                value: '{$data['unqcardrefid']}',
                            }));
                            
                            leftCol.items.insert(10, 'modx-user-cardholder', new Ext.form.TextField({
                                id: 'modx-user-cardholder',
                                name: 'cardholder',
                                fieldLabel: 'Владелец карты',
                                xtype: 'textfield',
                                anchor: '100%',
                                maxLength: 255,
                                value: '{$data['cardholder']}',
                            }));
                            
                            leftCol.items.insert(11, 'modx-user-bin', new Ext.form.TextField({
                                id: 'modx-user-bin',
                                name: 'bin',
                                fieldLabel: 'Идентификатор банка',
                                xtype: 'textfield',
                                anchor: '50%',
                                maxLength: 100,
                                value: '{$data['bin']}',
                            }));
                            
                            leftCol.items.insert(12, 'modx-user-expyear', new Ext.form.TextField({
                                id: 'modx-user-expyear',
                                name: 'expyear',
                                fieldLabel: 'Год действия карты',
                                xtype: 'textfield',
                                anchor: '25%',
                                maxLength: 100,
                                value: '{$data['expyear']}',
                            }));
                            
                            leftCol.items.insert(13, 'modx-user-expmonth', new Ext.form.TextField({
                                id: 'modx-user-expmonth',
                                name: 'expmonth',
                                fieldLabel: 'Месяц действия карты',
                                xtype: 'textfield',
                                anchor: '25%',
                                maxLength: 100,
                                value: '{$data['expmonth']}',
                            }));

                            
                        });
                    });
                </script>
            ");
        }
        break;
}
Сергей Кузьмин
11 июля 2017, 02:08
0
Хороший, быстрый и простой способ. Создал несколько текстовых полей и при создании пользователя они в админке есть. Но стоит только записать в них значения через api, из админки поля пропадают. Хотя значения в них записываются, и через api с ними работать можно.