MODX - Login (Регистрация пользователей)

Александр Мальцев
Александр Мальцев
43K
238
MODX - Login (Регистрация пользователей)
Содержание:
  1. Установка приложения Login
  2. Создание группы пользователей и ресурсов «Users»
  3. Создание страниц (ресурсов) для Login. Настройка доступа к этим страницам
  4. Страница (ресурс) «Регистрация»
  5. Ресурс "Подтверждение регистрации"
  6. Комментарии

Урок, в котором познакомимся с дополнением Login. Данное дополнение предназначено для реализации на сайте всего что может понадобиться для работы с пользователями во front-end. Оно включает в себя элементы для реализации регистрации, подтверждения регистрации, восстановления и изменения пароля, авторизации, личного кабинета и многих других функций.

Установка приложения Login

Для установки дополнительного компонента «Login» в CMS MODX Revolution открываем админку и переходим на страницу «Менеджер пакетов» (в главном меню пункт «Пакеты -> Установщик»). Нажимаем на кнопку «Загрузить пакеты», в поле поиска вводим «Login». После того как этот пакет будет найден, выполняем его загрузку и установку..

MODX - Установка приложения Login

Создание группы пользователей и ресурсов «Users»

Открываем страницу «Контроль доступа» (Шестерёнка -> Контроль доступа). В ней кликаем на кнопку «Новая группа пользователей».

Открытие в MODX страницы Контроль доступа

В диалоговом окне «Создать группу пользователей» заполняем следующие поля:

  • название - Users;
  • описание - Зарегистрированные пользователи;
  • создать параллельную группу ресурсов - Да;
  • политика системы управления - (нет политики).
Создание группы пользователей в CMS MODX Revolution

После этого нажимаем на кнопку «Сохранить». На странице «Контроль доступа» должна появиться только что созданная группа пользователей, т.е. «Users».

Группы пользователей, созданные в CMS MODX

Проверяем, появилась ли новая группа ресурсов «Users». Эта группа ресурсов была создана во время создания группы пользователей «Users» (включенная опция «Создать параллельную группу ресурсов»). Группа ресурсов «Users» необходима для помещения в неё ресурсов, доступ к которым будут иметь пользователи, расположенные в группе «Users». Это будут ресурсы «Личный кабинет», «Смена пароля» и «Редактирование данных». Анонимные пользователи не смогут получить доступ к этим ресурсам.

MODX - Созданная группа ресурсов Users

Настраиваем права группы пользователей «Users». Для этого на странице «Контроль доступа» нажимаем правой кнопкой мыши на группу «Users» и выберем пункт «Редактировать группу пользователей».

Редактирование группы пользователей Users в MODX Revolution

На странице «Группа пользователей: Users» нажимаем правой кнопкой мыши на строку «web» и выбираем пункт «Редактировать доступ к контексту».

MODX - Редактировать доступ к контексту

В диалоговом окне «Доступ групп пользователей к контексту» устанавливаем политику доступа на значение «Load, List and View» и нажимаем на кнопку «Сохранить».

Настройка политики доступа к контексту в MODX

Создание страниц (ресурсов) для Login. Настройка доступа к этим страницам

Создадим следующие страницы (ресурсы):

  • Регистрация (2);
  • Подтверждение регистрации (3);
  • Авторизация (4);
  • Восстановление пароля (5);
  • Личный кабинет (6);
  • Изменение пароля (7);
  • Редактирование данных (8).
Создание необходимых страниц для MODX Login

Настроим доступ к страницам «Личный кабинет», «Изменение пароля», «Редактирование данных». Они должны быть доступны только зарегистрированным пользователям (Users).

Откроем страницу «Группы ресурсов» (Сайт -> Группы ресурсов) и перенесём из правого дерева в группу «Users» вышеперечисленные ресурсы.

MODX Login - Настройка доступа к страницам

Кроме этого, группе пользователей (аноним) необходимо установить доступ «Load only». Это необходимо сделать для того чтобы они могли загружать страницы из группы ресурсов Users, проверять права доступа и получать ошибку 403 «Доступ запрещен». Если (аноним) не дать доступ «Load only», то для них эти страницы не будут существовать, и они получат ошибку 404 «Не найдено».

Порядок действий: Шестерёнка -> Контроль Доступа -> (аноним) -> Редактировать группу пользователей (правой кнопкой мыши) -> Доступ к группам ресурсов -> Добавить группу ресурсов.

В диалогово окне «Добавить группу ресурсов»:

  • Группа ресурсов : Users;
  • Контекст: web;
  • Минимальная роль: Member (9999);
  • Политика доступа: Load Only.
MODX Login - Настройка доступа к группе ресурсов Users анонимным пользователям

Последнее что необходимо ещё сделать, это указать в качестве страницы ошибки 403 «Доступ запрещен» ресурс «Авторизация» (id = 4). Осуществляется это в настройках системы с помощью параметра unauthorized_page. Теперь если анонимный пользователь захочет попасть на закрытые страницы, ему выведится страница «Авторизация».

MODX - Настройка страницы ошибки 403

Страница (ресурс) «Регистрация»

Страница «Регистрация» будет выполнять следующие действия:

  • выводить пользователю регистрационную форму;
  • обрабатывать отправленную пользователем форму (данные) на сервере с помощью сниппета Register.
MODX Login - Регистрация пользователя

Обработку формы сниппетом Register настроим так, чтобы он выполнял следующее:

  1. Переходил к обработке регистрационной формы только в том случае, если она была отправлена с помощью кнопки, у которой значение атрибута name равно login-register-btn.
  2. Выполнял проверку (валидацию) полей формы на соответствие указанным требованиям. При обнаружении ошибок, выводил их в соотвествующие места ([[!+reg.error.имяПоля]]) формы.
  3. Если форма, заполненная пользователем, ошибок не имеет (прошла валидацию):
    • отображал сообщение об успехе;
    • отправлял пользователю email, в котором содержалась бы сообщение и ссылка. Данное действие необходимо для того, чтобы пользователь подтвердил email, т.е. активировал с помощью неё (ссылки) свою учётную запись.
MODX Login - Процесс регистрации пользователя

Содержимое ресурса «Регистрация» (форма и сниппет Register):

...
[[!Register?
  &submitVar=`login-register-btn`
  &activation=`1`
  &activationEmailSubject=`Подтверждение регистрации`
  &activationResourceId=`3`
  &successMsg=`Спасибо за регистрацию. На вашу электронную почту <span class="font-weight-bold">[[!+reg.email]]</span> отправлено письмо, содержащее ссылку, необходимую для активации аккаунта. Перейдите по ссылке в письме, чтобы завершить процедуру регистрации.`
  &usergroups=`Users`
  &usernameField=`email`
  &passwordField=`password`
  &validate=`nospam:blank,
    password:required:minLength=^8^,
    password_confirm:password_confirm=^password^,
    fullname:required,
    email:required:email`
  &placeholderPrefix=`reg.`
]]
<div class="container">
  <div class="card bg-light my-3" style="max-width: 30rem; margin-left: auto; margin-right: auto;">
    <div class="card-header">Регистрация</div>
    <div class="card-body">
      [[!+error.message:eq=``:then=`
        <form class="form" action="[[~[[*id]]]]" method="post">
        <input type="hidden" name="nospam" id="nospam" value="[[!+reg.nospam]]" />
        <div class="form-group">
          <label for="fullname">Имя:</label>
          <input type="text" name="fullname" class="form-control" value="[[!+reg.fullname]]">
          [[!+reg.error.fullname]]
        </div>
        <div class="form-group">
          <label for="email">Email:</label>
          <input type="email" name="email" class="form-control" value="[[!+reg.email]]">
          [[!+reg.error.email]]
        </div>
        <div class="form-group">
          <label for="password">Пароль:</label>
          <input type="password" name="password" class="form-control" value="[[!+reg.password]]">
          [[!+reg.error.password]]
        </div>
        <div class="form-group">
          <label for="password_confirm">Введите пароль ещё раз:</label>
          <input type="password" name="password_confirm" class="form-control" value="[[!+reg.password_confirm]]">
          [[!+reg.error.password_confirm]]
        </div>
        <input type="submit" name="login-register-btn" class="btn btn-primary" value="Отправить">
      </form>
      `:else=`[[!+error.message]]`]]
    </div>
  </div>
</div>
...

Описание используемых параметров сниппета Register:

Имя параметра Описание
submitVar Ключ, значение которого проверяется перед тем как сниппет Register начнёт обрабатывать форму. Если в качестве значения этого параметра указать пустую строку или false, то сниппет Register будет обрабатывать форму при получении любого Post запроса.
activation Определяет стоит ли подтверждать email, указанный в регистрационной форме, или нет. Т.е. пользователь не будет активированным до тех пор, пока он не подтвердит свой email. Значение: 1 (да, необходимо).
activationEmailSubject Тема письма, в котором приходит ссылка для активирования учётной записи.
activationEmailTpl Шаблон письма, содержащий информацию и ссылку для активирования учётной записи. Будем использовать шаблон по умолчаию: lgnActivateEmailTpl.
activationResourceId Идентификатор ресурса, в котором находится сниппет с помощью которого осуществляется активирование учётной записи пользователя. Значение: 3 (id ресурса "Подтверждение регистрации").
successMsg Отображает указанное сообщение после успешной отправки регистрационной формы. Этот параметр работает тогда, когда не используется параметр submittedResourceId.
submittedResourceId Перенаправляет пользователя на указанный ресурс после успешной отправки регистрационной формы.
usergroups Список (через запятую) названий групп пользователей или идентификаторов этих групп, в которые необходимо добавить только что зарегистрированного пользователя. Значение: Users.
usernameField Имя поля формы, содержащее в качестве значения имя пользователя. Значение: email.
passwordField Имя поля формы, содержащее пароль пользователя. Значение: password.
validate Список (через запятую) полей для валидации (проверки). Указывается так: имя:валидатор (например, username: required, email:required). Валидаторы можно соединять. Например, email:email:required.
placeholderPrefix Префикс для плейсхолдеров. Например, значения плейсхолдеров для поля email с учётом префикса reg.: [[!+reg.email]] (значения поля), [[!+reg.error.email]] (значение ошибки).

Как работает активация аккаунта

Происходит это так: после успешной валидации формы, сниппет Register создаёт объект modUser и устанавливает полю active значение 0. Далее он отправляет письмо пользователю по указанному в регистрационной форме email. Данное письмо содержит URL (ссылку для активации). Как только пользователь перейдёт по этому URL, сниппет ConfirmRegister изменит значение поля active на 1. Теперь пользователь сможет авторизироваться на сайте, т.е. войти под своей учётной записью.

Ресурс "Подтверждение регистрации"

Страница "Подтверждение регистрации" предназначена для активирования аккаунта пользователя. Активирование выполняет сниппет ConfirmRegister на основании URL. Принцип работы его заключается в том, чтобы изменить значение поля active пользователя на 1. После этого пользователь может авторизоваться на сайте, т.е. войти под своей учётной записью.

MODX Login - Результат работы сниппета ConfirmRegister

Содержимое ресурса "Подтверждение регистрации" (сниппет ConfirmRegister):

[[!ConfirmRegister?
  &authenticate=`1`
  &redirectTo=`6`
  &errorPage=`6`
]]

Описание используемых параметров сниппета ConfirmRegister:

Имя параметра Описание
authenticate Проверка подлинности и авторизация пользователя в текущем контексте (после подтверждения регистрации). Значение: 1 (да, выполнить).
redirectTo После успешного подтверждения, перенаправляет пользователя на ресурс, имеющий id = 6 (личный кабинет).
errorPage Перенаправляет пользователя на страницу (id = 6 - личный кабинет), если он попытается получить доступ к ней уже после активирования своего аккаунта.

Статьи, связанные с этой темой:

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

  1. Anna Shishkina
    21 июля 2021, 18:45
    Александр, здравствуйте!
    Большое спасибо за вашу информацию! Все понятно и очень хорошо сформулировано!
    Такой вопрос: после успешной регистрации — переход на ресурс с ID, прописанным в submittedResourceId.
    В этом ресурсе хочу прописать: «Для завершения регистрации отправлено сообщение на ваш email: (и вот тут надо написать email со страницы регистрации).» Не могу сообразить, как можно затянуть на дополнительный ресурс то, что у нас в ресурсе с формой регистрации обозначено как
    [[!+reg.fullname]]
    и как
    [[!+reg.email]]

    1. Zulya
      30 мая 2021, 01:01
      Здравствуйте! У меня письма отправляются. Но в письме нет ссылки подтверждения. Они приходят вот с таким текстом и без ссылки подтверждения:
      Thanks for registering! To activate your new account, please click on the following link:
      If you did not request this message, please ignore it.
      Thanks,
      Site Administrator

      Как думаете, почему ссылка подтверждения отправляется пустой?
      1. Таня
        13 мая 2021, 09:54
        Добрый день! Спасибо за отличную статью. Настроила, работает.
        Подскажите, пожалуйста, с чём может быть связано такое:

        При запросе страниц, доступных только авторизованным пользователям (Группа Users), посетитель (Аноним) получает ошибку 404, а не страницу Авторизации? Хотя этот параметр указан в настройках. Спасибо!
        1. Таня
          13 мая 2021, 11:00
          Разобралась :) Забыла добавить группе Аноним доступ Load Only к группе ресурсов Users. Сейчас всё ОК.
        2. Амиль
          04 мая 2021, 04:25
          Здравствуйте! Подскажите, пожалуйста, что делать если при переходе по ссылке в письме всплывает ошибка 404 страница не найдена. И в личный кабинет после этого тоже не возможно попасть, такая же ошибка. Хотя пользователь подтверждается, судя по базе.
          1. Дмитрий Антипов
            25 апреля 2021, 15:35
            Добрый день. А как сделать так, чтобы 3 поля: Фамилия, Имя, Отчество объединились и записались в fullname?
            1. Geektor
              20 февраля 2021, 01:03
              Здравствуйте! Я новичок, сделал всё, как написано в статье, захожу на страницу регистрации, но письмо не приходит. Как я понимаю, нужно что-то ещё дописывать?)
              1. Geektor
                21 февраля 2021, 20:07
                При отправке формы регистрации пользователь создаётся в modx, но email не приходит ни на одну из почт: ни на mail ни на gmail ни на yandex. При отправке формы на восстановление пароля (в оба поля вставляю email) — на странице выдаёт сообщение об успешной отправки на почту инструкций по восстановлению пароля от аккаунта, но на саму почту так ничего и не приходит(
                1. Александр Мальцев
                  23 февраля 2021, 15:44
                  Здравствуйте! Посмотрите журнал ошибок в MODX. Скорее всего при настройке почты указали что-то неправильно.
                  1. Geektor
                    24 февраля 2021, 02:56
                    Ещё раз скопировал сниппет с Вашей статьи (т.к. в процессе решения проблемы изменял его) — всё заработало!) Вобщем основной причиной оказалася не настроенный SMTP)
                    1. Geektor
                      24 февраля 2021, 02:28
                      Выяснилось, что также необходимо было настроить SMTP
                      Системные настройки -> Core -> Почта
                      — SMTP аутентификация — Да
                      SMTP хосты — smtp.mail.ru
                      SMTP пароль — пароль от почтового ящика.
                      SMTP номер порта — 25 или 2525 (либо 465, и в этом случае также нужно указать «ssl» в пункте «SMTP префикс для соединений»). (Этот параметр я взял на странице хостинг провайдера (в моём случае Timeweb))
                      SMTP пользователь — почтовый ящик, с которого будет происходить отправка.
                      Использовать SMTP — Да
                      — Вобщем, частично это помогло: после регистрации, если перейти оттуда на страницу авторизации, а оттуда на страницу восстановления пароля и вбить почту и нажать «восстановить пароль» — письмо приходит на указанную почту. Но при регистрации письмо на почту не отправляется ни в какую, что я только не делал. Я уже удалил последнюю версию пакета Login (версия 1.9.9) и скачал с репозитория версию 1.9.7 — всё равно всё то же самое — снипет регистрации не отправляет письмо на почту после создания пользователя. Никаких ошибок не выдаёт. У кого это заработало? Какая версия Modx и какая версия пактеа Login у вас?) Настраивали ли вы дополнительно что-либо (то что не описано в статье)?
                      1. Geektor
                        24 февраля 2021, 02:58
                        SMTP хосты зависит от того, какой почтовый сервер используется (smtp.yandex.ru будет для яндекса)
                        1. Александр Мальцев
                          24 февраля 2021, 13:44
                          В качестве SMTP конечно нужно указывать адрес того почтового сервиса, который вы используете.
                          1. Александр Мальцев
                            24 февраля 2021, 13:41
                            Настройки при использовании почтового сервиса Яндекс (почта для домена): скриншот.
                            Также желательно настроить DKIM-подпись. Она нужна для того, чтобы подтвердить, что адрес, указанный в поле «От кого», является реальным адресом.

                        2. Geektor
                          23 февраля 2021, 16:15
                          Здравствуйте)) Зашёл в журнал ошибок, посмотрел последние, зашёл в инкогнито и попытался зарегистрироваться, снова вернулся к журналу ошибок, обновил — ничего нового не добавилось… Запрашивал логи у хостинг провайдера — при отправке с формы входа в CMS письма сначала тоже не проходили, но там мы выяснили причину — отклоняли почтовые сервера, с этим разобрались, починили. Потом я попытался через эту же форму (входа в CMS) восстановить данные от учёток которые я посоздавал с помощью страницы регистрации — всё приходит. Однако при отправке из формы регистрации нет ничего, хостинг-провайдер сказал что в логах тоже не видит попыток отправки писем
                    2. Aleksandr Ustinov
                      11 ноября 2020, 22:19
                      Добрый вечер! Подскажите пожалуйста, сделал свой сниппет регистрации на сайте через modxAPI все хорошо регистрация проходит, но после регистрации перед первым входом пользователя приходится входить через панель управления и в пользователе нажимать СОХРАНИТЬ, изменив любой параметр, Только после этих манипуляций пользователя начинает запускать на сайт. Такое ощущение что как будто пользователь появляется в базе но не хватает какого то параметра для его правильной работы, а после нажатия сохранить это что то появляется как будто регистрация произошла не на сайте а через панель управления. Подскажите как это можно исправить.
                      1. Александр Мальцев
                        13 ноября 2020, 14:55
                        Привет! Наверно что-то в коде не дописали.
                      2. Павел
                        04 августа 2020, 08:00
                        Здравствуйте.
                        Подскажите пожалуйста, возможно ли реализовать автоматическую авторизацию, по ссылке из письма электронной почты?
                        1. Александр Мальцев
                          06 августа 2020, 06:02
                          Здравствуйте.
                          Да, для этого можно создать на сайте php-скрипт, на который будет переходить пользователь при нажатии на ссылку в письме и передовать ему необходимые данные для создания и авторизации пользователя.
                          Например:
                          <?php
                          
                          require_once 'config.core.php';
                          
                          require_once MODX_CORE_PATH . 'model/modx/modx.class.php';
                          $modx = new modX();
                          $modx->initialize('web');
                          $modx->getService('error', 'error.modError', '', '');
                          
                          $data = array(
                            'class_key' => 'modUser',
                            'username' => 'Test2',
                            'fullname' => 'Test Test',
                            'email' => 'test3@test.com',
                            // отправлять письмо с паролем на почту
                            'passwordnotifymethod' => 'e',
                            'passwordgenmethod' => '',
                            'specifiedpassword' => '11111111',
                            'confirmpassword' => '11111111',
                            'active' => 1,
                            'groups' => array(
                              array(
                              'usergroup' => 2, // Id группы пользователей (2 - Users)
                              'role' => 1, // Id роли (1 - Member)
                              )
                            )
                          );
                          
                          $response = $modx->runProcessor('security/user/create', $data);
                          
                          if ($response->isError()) {
                            print_r($response->getResponse());
                          }
                          
                          $data = array(
                            'username' => 'Test2',
                            'password' => '11111111',
                            'rememberme' => 1,
                            'login_context' => 'web',
                          );
                          
                          $response = $modx->runProcessor('/security/login', $data);
                          
                          if ($response->isError()) {
                            echo $response->getMessage();
                          } else {
                            echo 'Пользователь авторизован';
                          }
                          
                          1. Elena
                            11 ноября 2020, 22:30
                            Здравствуйте!
                            Подскажите, пожалуйста, почему могут не приходить уведомления о подтверждении регистрации с сайта (modx rev), если указать mail. ru или yandex (пока сами тестируем, сайт не запущен в массы)?
                            На адрес Gmail приходит через секунду, а на другие — ничего. В спаме пусто.

                            Заранее спасибо!
                            1. Александр Мальцев
                              12 ноября 2020, 03:31
                              Здравствуйте! Вы отправляете через SMTP? Если нет, то настройте отправку через SMTP. Может на стороне yandex и mail.ru срабатывают какие-то фильтры и они их не пропускают. Также желательно на хостинге настроить DKIM подпись.
                              1. Elena
                                12 ноября 2020, 07:41
                                Александр, спасибо большое за ответ!
                        2. Павел
                          01 августа 2020, 01:20
                          Здравствуйте.
                          Подскажите пожалуйста, как можно отредактировать введенные при регистрации данные, перед созданием Пользователя.
                          Допустим в электронной почте все буквы сделать маленькими, если пользователь указал большие
                          и убрать лишние пробелы в начале и в конце строки.
                          При редактировании данных, я это реализовал. Не получается это сделать именно при регистрации.
                          1. Александр Мальцев
                            01 августа 2020, 15:27
                            Здравствуйте.
                            Это можно выполнить через preHooks. Для этого вам нужно создать сниппет и указать его в качестве значения параметру preHooks.
                            Например:
                            [[!Register?
                              ...
                              &preHooks=`actionBeforeRegister`
                            ]]
                            В этом сниппете (в данном случае в actionBeforeRegister) необходимо написать нужные преобразования.
                            Например, преобразуем fullname к нижнему регистру:
                            <?php
                            $fullname = mb_strtolower($hook->getValue('fullname'));
                            $hook->setValue('fullname', $fullname);
                            return true;
                            
                            1. Павел
                              01 августа 2020, 22:39
                              Благодарю. Все получилось
                          2. Фунтик
                            26 июля 2020, 15:56
                            Здравствуйте, а как сделать так, чтобы при регистрации, если на эту электронную почту уже зарегистрирован пользователь, выводилось сообщение в поле для emai по типу «эта эл почта уже используется»?
                            1. Александр Мальцев
                              01 августа 2020, 16:49
                              Привет! Для этого будет достаточным установить в настройках параметру allow_multiple_emails (разрешить пользователям использовать один адрес электронной почты) значение нет.
                            2. Людмила
                              30 июня 2020, 22:49
                              Здравствуйте! Благодарю за подробные статьи. Подскажите, пожалуйста, кроме установки пользователю activ=1 при подтверждении регистрации какие изменения делаются в базе? Я никак не могу взять в толк, кого modx считает авторизованным и по какому принципу работают фильтры авторизации modx.user.id:isloggedin:is? При выходе разве activ становится другим?
                              1. Александр Мальцев
                                04 июля 2020, 11:54
                                Здравствуйте! Установка пользователю «active = 1» делает его активным, т.е. даёт ему возможность войти в систему под своим логином и паролем. При выходе пользователя значение active конечно остаётся таким же, иначе в следующий раз этот пользователь уже не смог бы войти.

                                Принцип работы с пользователями в MODX следующий. При заходе нового пользователя на сайт, ему в базе данных в таблице modx_session создаётся запись, в которую сохраняется id сессии, а также некоторые другие данные. Также id сессии отправляется пользователю в составе ответа сервера в виде cookies, которые его браузер сохраняет в ключе MODSESSID. Когда этот пользователь уже будет запрашивать другую страницу, вместо с запросом на сервер теперь уже отправится его MODSESSID в составе cookies. При получении этого запроса сервер теперь будет уже знать, что это тот же пользователь.

                                Когда пользователь не авторизирован в MODX, он имеет в качестве id пользователя значение 0. Это значение хранится в таблице modx_session в поле data этого пользователя. Определяется пользователь в этой таблице по id сессии.

                                При авторизации ищется запись этого пользователя в modx_session по id сессии и записывается в неё (поле data) id пользователя.

                                При использовании фильтра «modx.user.id:isloggedin:is» MODX смотрит id пользователя в modx_session. Если это значение больше или равно 1, то это значит, что пользователь авторизован. В противном случае – нет.
                                1. Людмила
                                  04 июля 2020, 22:56
                                  Благодарю. Хотелось бы, чтобы после прохождения по ссылке с подтверждением пользователь становился уже авторизованным. То есть дописывать надо кусочек, связанный с куками.
                                  1. Александр Мальцев
                                    05 июля 2020, 16:00
                                    Нет, с куками ничего дописывать не надо. ConfirmRegister это делает автоматически при установке параметру authenticate значения 1.

                              2. Юрий
                                29 июня 2020, 14:54
                                Здравствуйте. Подскажите в какой таблице БД хранятся данные пользователей? Как можно добавить новые поля в ЛК? Заранее спасибо.
                                1. Александр Мальцев
                                  04 июля 2020, 15:06
                                  Здравствуйте!
                                  Данные пользователей находятся в таблицах «modx_users» и «modx_user_attributes».
                                  Добавление новых полей осуществляется через расширенные поля. Эти поля находятся на странице пользователя на вкладке «Дополнительные поля данных».
                                  Работа с ними в коде выполняется так:
                                  // id пользователя
                                  $user_id = 2;
                                  if ($user = $modx->getObject('modUser', $user_id)) {
                                    // получаем профиль пользователя 
                                    if ($profile = $user->getOne('Profile')) {
                                      // получаем специальное поле extended
                                      $extended = $profile->get('extended');
                                      // устанавливаем полю, например, mynewfield значение
                                      $extended['mynewfield'] = 'value';
                                      // сохраняем
                                      $profile->set('extended', $extended);
                                      $profile->save();
                                    }
                                  }
                                  
                                2. Андрей
                                  27 апреля 2020, 10:11
                                  Подскажите, а как сделать, чтобы при регистрации одно из полей заполнялось заранее установленными символами?
                                  Условно говоря есть дополнительное поле у пользователя tipe и вот чтобы при регистрации сразу уходило tipe=«fl», при этом чтобы данная информация не выводилась в форме.
                                  1. Александр Мальцев
                                    27 апреля 2020, 14:52
                                    Это можно выполнить разными способами, например, через postHooks сниппета Register. Другой вариант — это создать плагин на событие OnUserSave и в нём написать локигу для сохранения значения «fl» в дополнительное поле «tipe».
                                    1. Андрей
                                      27 апреля 2020, 21:41
                                      я неточно сформулировал задачу — при регистрации с одной страницы один параметр, при регистрации с другой — другой должен быть. поэтому OnUserSave наверное не подойдет, буду пробовать через postHooks
                                      1. Александр Мальцев
                                        28 апреля 2020, 12:06
                                        Да, тогда нужно через postHooks.
                                        1. Андрей
                                          28 апреля 2020, 14:47
                                          Спасибо, все получилось.
                                          Может кому пригодится — вот текст сниппета, который вызывается в postHooks
                                          <?php
                                          $email = $hook->getValue('email');
                                          $user = $modx->getObject('modUser', array('username' => $email));
                                          
                                          if (is_object($user)) {
                                              $profile = $user->getOne('Profile');
                                              $fields = $profile->get('extended');
                                              $fields['tip'] = 'fl';
                                              $profile->set('extended', $fields);
                                              $profile->save();
                                          }
                                          
                                          под себя нужно поправить наименование дополнительного поля и его значение.
                                          $fields['tip'] = 'fl';
                                          1. Александр Мальцев
                                            28 апреля 2020, 14:55
                                            Отлично!
                                            1. Человек7
                                              30 апреля 2020, 02:07
                                              все время пишет указан неправильный код активации, когда пытаюсь сохранить профиль, никак не пойму что это. И кстати можно ли сделать на бутстрапе 3 выпадающее меню направо при наведении, без добавления сторонних библиотек. Спс.
                                              1. Александр Мальцев
                                                01 мая 2020, 13:46
                                                Не сталкивался с таким.
                                                Для того чтобы меню выпадало вправо добавьте к нему соответствующие стили:
                                                top: 0 !important;
                                                left: 100% !important;
                                                
                                                1. Человек7
                                                  01 мая 2020, 23:47
                                                  спс большое, единственный сайт на котором мне ответили))
                                  2. amikawa
                                    28 февраля 2020, 02:41
                                    Здраствуйте, я упустил момент, до формы ставится условие на мне не понятном плейсхолдере [[+error.message]].
                                    Подскажите, пожалуйста, откуда он взялся и почему он должен быть?
                                    1. amikawa
                                      28 февраля 2020, 18:00
                                      Display a Success Message

                                      If the «submittedResourceId» property is not specified, Register will simply display a success message to the [[+error.message]] placeholder. This is the value of the «successMsg» property. For example:

                                      [[!Register? &successMsg=`Thanks for registering!`]]

                                      Copy

                                      Will display «Thanks for registering!» in the [[+error.message]] property in the Resource that your [[Register]] snippet call is in after the User submits a valid registration form.
                                      — А вот и ответ, это связано с работой этого снипета, а название дали такое, чтобы запутать начинающих разработчиков, что очень «умно»
                                      Но всё равно странно, что вы не объяснете в работе своего плагина такие супернеочевидные вещи, моё пожелание для развития вашего ресурса, не оставлять пробелов по объясняемой теме, толку объяснять что-то не до конца, тем более вы проделали 999% работы, благодарен за понимание и спасибо за ваш труд.
                                      1. Александр Мальцев
                                        29 февраля 2020, 03:53
                                        Здравствуйте, если есть какие-то не очевидные вещи в статьях, то спрашивайте, поможем разобраться. К тому же это только приветствуется, т.к. с помощью этих пояснений мы сделаем инструкцию более понятной для большего числа пользователей. А написать 100% понятную инструкцию для всех пользователей сразу не всегда получается.

                                        Плейсхолдеры в большинстве случаев в MODX устанавливаются сниппетами. Это такие вставки, которые потом заменяются на что-то определённое (в основном на значения, которые генерирует сниппет в процессе своего выполнения).

                                        В этом случае как вы правильно разобрались это делает сниппет Register. Именно он устанавливает плейсхолдер [[+error.message]]. Значение, которое вместо него будет выведено определяется с помощью параметра successMsg, но только в случае успешной отправки формы. В противном случае (если форма просто выводится или она содержит не корректные значения в полях), то парсер MODX установит в качестве значения плейсхолдера [[+error.message]] пустую строку, т.к. его значение никто не установил.

                                        В коде мы проверяем равен ли плейсхолдер пустой строке и если да, то выводим форму. А если нет, то значит форма успешно отправлена, и значит мы выводим уже не форму, а сообщение, в котором благодарим пользователя за регистрацию. Т.е. само значение плейсхолдера error.message.
                                        [[!+error.message:eq=``:then=` выводим форму `:else=`[[!+error.message]]`]]
                                        1. amikawa
                                          02 марта 2020, 10:11
                                          Спасибо за ваш ответ, вы замечателен)
                                          А если я новичок в Modx и у меня постоянно полно «дурацких вопросов», не подскажете, где этим сообществом принято обмениваться инфой?)
                                          1. Александр Мальцев
                                            02 марта 2020, 15:08
                                            Это было написано про это место. Не могу, конечно, отвечать за других людей, но я фанат веб-разработки. Поэтому, задавайте вопросы, и если я знаю как их решить, то обязательно отвечу.
                                            1. amikawa
                                              02 марта 2020, 18:47
                                              Я не сомневаюсь, что вы поможете, но, чтобы дуракам-самоучкам вроде меня не терять мотивацию заниматься всем этим прекрасным делом, хотелось бы общаться в более открытой форме, по принципу телеги посредством сообщений или недлительных колл-сессий, на своём опыте, можете что посоветовать, чтобы не страдать мракобесием, а быть частью сообщества?
                                              1. Александр Мальцев
                                                03 марта 2020, 06:51
                                                Понимаю, но я не участвую в обсуждениях. Не мой формат.
                                    2. Евгений
                                      08 февраля 2020, 21:08
                                      Здравствуйте, Александр! Подскажите, пожалуйста, в чём может быть проблема, точнее проблему нашел, но как продвинуться дальше не понимаю.

                                      Столкнулся с такой проблемой: при переходе по ссылке активации аккаунта перекидывает на ресурс который указан в errorPage. Залез в контроллер ConfirmRegister и увидел что на строке
                                      $this->user = $this->modx->getObject('modUser',array('username' => $this->username));
                                      метода getUser не может найти пользователя. При регистрации в username записывается email пользователя. При попытке вывести $this->username в журнал ошибок в журнале ошибок при нажатии на «Обновить» просто висит сообщение «В процессе» и всё. Ничего не понимаю, раньше таких проблем с этим login'ом не было, а на этом сайте уже недели 3 бьюсь с личным кабинетом (то авторизация не работала, то теперь активация), хоть самому с нуля аналог login'а пиши…
                                      1. Александр Мальцев
                                        10 февраля 2020, 06:39
                                        Здравствуйте!
                                        Не знаю с чем это может быть связано. Попробуйте переустановить MODX и компонент Login.
                                      2. Людмила
                                        22 декабря 2019, 21:38
                                        Здравствуйте! Благодарю за полезную статью. Скажите, у меня не срабатывает проверка повторного ввода пароля при регистрации — при любом значении passwdAgain регистрация происходит, проверки равенства passwd и passwdAgain не происходит.
                                        Даже при пустом поле passwdAgain регистрация происходит.

                                        Делаю всё по инструкции. passwdAgain:passwdAgain=^passwd^ не срабатывает. В чем причина?

                                        Изменила строку на passwdAgain:required:passwdAgain=^passwd^.

                                        Теперь при пустом значении регистрация не происходит, требует заполнить passwdAgain, но не проверяет на равенство с passwd.

                                        Помогите, пожалуйста.
                                        1. Andrey
                                          16 февраля 2020, 07:25
                                          Делаю всё по инструкции. passwdAgain:passwdAgain=^passwd^ не срабатывает. В чем причина?

                                          А происходит это потому, что стандартный валидатор Formit имеет имя «password_confirm». т.е. правильная строка будет passwdAgain:password_confirm=^passwd^
                                          1. Людмила
                                            30 июня 2020, 22:51
                                            Огромное спасибо! passwdAgain:password_confirm=^passwd^ работает!
                                          2. Александр Мальцев
                                            24 декабря 2019, 15:23
                                            Здравствуйте! Спасибо! Это проблема скорее всего имеет те же корни, как и та, которую вы описали в этом комментарии.
                                            1. Людмила
                                              24 декабря 2019, 16:10
                                              Нет, на домене тоже самое. oartemi-slovo.ru/registracziya.html
                                              1. Александр Мальцев
                                                26 декабря 2019, 08:59
                                                Попробуйте обновить или переустановить компонент Login.
                                          3. Vadim
                                            15 августа 2019, 23:58
                                            Здравствуйте, Александр. Очень понятная статья по созданию регистрации. Я делаю все по инструкции, однако, возникают проблемы. При проверке регистрации я попытался отправить форму. Насколько, я понимаю — валидация не проходит, потому что даже при пустых полях кнопка регистрации срабатывает. Даже если я ввожу все поля — письмо не приходит, однако 1 раз у меня получилось получить письмо, но URL активации не получил (переделывал по инструкции несколько раз). Как быть и что делать — не знаю, прошу вашей помощи (скриншот)
                                            [[!Register?
                                              &submitVar=`submitbtn`
                                              &activation=`1`
                                              &activationEmailSubject=`Подтверждение регистрации`
                                              &activationResourceId=`28`
                                              &successMsg=`<p>Спасибо за регистрацию. На вашу электронную почту [[!+reg.email]] отправлено письмо, содержащее
                                                ссылку, необходимую для активацию аккаунта. Перейдите по этой ссылке, чтобы завершить процедуру регистрации.</p>`
                                              &usergroups=`Users`
                                              &usernameField=`email`
                                              &passwordField=`passwd`
                                              &validate=`nospam:blank, passwd:required:minLength=^8^, passwdAgain:passwdAgain=^passwd^, fullname:required,
                                              email:required:email`
                                              &placeholderPrefix=`reg.`
                                            ]]
                                            
                                            [[!+error.message:eq=``:then=`
                                            <form action="[[~[[*id]]]]" method="post" class="form-horizontal">
                                              <input type="hidden" name="nospam" id="nospam" value="[[!+reg.nospam]]">
                                              <div class="form-group">
                                                <label for="fullname" class="col-sm-4 control-label">Имя и фамилия:</label>
                                                <div class="col-sm-8">
                                                  <input type="text" name="fullname" class="form-control" id="fullname" placeholder="Как Вас зовут"
                                                    value="[[!+reg.fullname]]">
                                                  <span class="help-block text-error">
                                                    [[!+reg.error.fullname]]
                                                  </span>
                                                </div>
                                              </div>
                                              <div class="form-group">
                                                <label for="email" class="col-sm-4 control-label">Email:</label>
                                                <div class="col-sm-8">
                                                  <input type="email" name="email" class="form-control" id="email" placeholder="Введите Email"
                                                    value="[[!+reg.email]]">
                                                  <span class="help-block text-error">
                                                    [[!+reg.error.email]]
                                                  </span>
                                                </div>
                                              </div>
                                              <div class="form-group">
                                                <label for="passwd" class="col-sm-4 control-label">Пароль:</label>
                                                <div class="col-sm-8">
                                                  <input type="password" name="passwd" class="form-control" id="passwd" placeholder="Введите пароль"
                                                    value="[[!+reg.passwd]]">
                                                  <span class="help-block text-error">
                                                    [[!+reg.error.passwd]]
                                                  </span>
                                                </div>
                                              </div>
                                              <div class="form-group">
                                                <label for="passwdAgain" class="col-sm-4 control-label">Подтвердите пароль:</label>
                                                <div class="col-sm-8">
                                                  <input type="password" name="passwdAgain" class="form-control" id="passwdAgain"
                                                    placeholder="Введите пароль ещё раз" value="[[!+reg.passwdAgain]]">
                                                  <span class="help-block text-error">
                                                    [[!+reg.error.passwdAgain]]
                                                  </span>
                                                </div>
                                              </div>
                                              <input type="submit" value="Далее" name="submitbtn" id="submitbtn" class="btn btn-primary pull-right">
                                            </form>
                                            `:else=`<div class="alert alert-success">[[!+error.message]]</div>`]]
                                            
                                            1. Vadim
                                              16 августа 2019, 01:20
                                              Письмо не приходит, потому что даже сам пользователь не добавляется после нажатия кнопки register.
                                              1. Vadim
                                                16 августа 2019, 00:30
                                                UPD. После нажатия на кнопку «Далее». Он переходит на другую страницу. То есть если мы находились на странице регистрации — «mysite.ru/registracziya/» То после нажатия на кнопку открывается страница «mysite.ru/registracziya/registracziya/»
                                                1. Александр Мальцев
                                                  17 августа 2019, 15:22
                                                  У вас в MODX настроены ЧПУ?
                                                  1. Vadim
                                                    17 августа 2019, 17:34
                                                    Решил проблему.В разделе head не стоял base href
                                                    Но у меня появилась другая проблема после нажатия на кнопку выход в личном кабинете — сессия не закрывается. Меня просто перебрасывает на главную страницу.
                                                    1. Александр Мальцев
                                                      26 августа 2019, 14:12
                                                      Выход из учётной записи авторизированного пользователя осуществляется через сниппет Login. Id ресурса на который нужно перейти указывается через параметр logoutResourceId.
                                              2. Толстый Ленивый Кот
                                                30 июля 2019, 18:09
                                                Здравствуйте, Александр!
                                                Спасибо за крайне полезный ресурс, много полезной информации. Прошу, по возможности, помочь с авторизацией. Проблема та же, что была у Дмитрия (тема от 03 августа 2018) — письма для подтверждения приходят по два раза. Я перерыл уже всё, что возможно, но так ничего и не нашёл :( Поставил автогенерацию пароля и стало ещё интереснее — пароли в письмах разные (раньше приходило два с одинаковым паролем, но разным параметром «lp»). Срабатывает из них только одно, последнее, первое явный «глюк». Вот RegisterFormTpl:
                                                <div class="row">
                                                    <div class="col-md-8 col-lg-6">
                                                      <div class="panel panel-primary">
                                                        <div class="panel-heading"><i class="glyphicon glyphicon-edit"></i> Регистрация</div>
                                                          <div class="panel-body">
                                                            <form action="[[~[[*id]]]]" method="post" class="form-horizontal">
                                                              <input type="hidden" name="nospam" value="[[!+reg.nospam]]">
                                                              <input type="hidden" name="password" value="superseekret">
                                                              <div class="form-group">
                                                                <label for="ref_id" class="col-sm-4 control-label">ID реферала:</label>
                                                                <div class="col-sm-8">
                                                                  <input type="text" name="ref_id" class="form-control" id="ref_id" placeholder="От кого вы пришли" value="[[!+reg.ref_id]]">
                                                                  <span class="help-block text-error">
                                                                    [[!+reg.error.ref_id]]
                                                                  </span>        
                                                                </div>      
                                                              </div>
                                                              <div class="form-group">
                                                                <label for="fullname" class="col-sm-4 control-label">Имя и фамилия:</label>
                                                                <div class="col-sm-8">
                                                                  <input type="text" name="fullname" class="form-control" id="fullname" placeholder="Как Вас зовут" value="[[!+reg.fullname]]">
                                                                  <span class="help-block text-error">
                                                                    [[!+reg.error.fullname]]
                                                                  </span>        
                                                                </div>      
                                                              </div>
                                                              <div class="form-group">
                                                                <label for="email" class="col-sm-4 control-label">Email:</label>
                                                                <div class="col-sm-8">
                                                                  <input type="email" name="email" class="form-control" id="email" placeholder="Введите Email" value="[[!+reg.email]]">
                                                                  <span class="help-block text-error">
                                                                    [[!+reg.error.email]]
                                                                  </span>        
                                                                </div>      
                                                              </div>
                                                              <div class="form-group">
                                                                <label for="login" class="col-sm-4 control-label">Login:</label>
                                                                <div class="col-sm-8">
                                                                  <input type="text" name="login" class="form-control" id="login" placeholder="Введите Login" value="[[!+reg.login]]">
                                                                  <span class="help-block text-error">
                                                                    [[!+reg.error.login]]
                                                                  </span>        
                                                                </div>      
                                                              </div>
                                                              <input type="submit" value="Далее" name="sbmtbtn" class="btn btn-primary pull-right">
                                                            </form>
                                                          </div>
                                                        </div>
                                                      </div>
                                                    </div>
                                                </div>
                                                
                                                Вот страница регистрации:
                                                [[!Register?
                                                    &submitVar=`sbmtbtn`
                                                    &activation=`1`
                                                    &activationEmailSubject=`Подтверждение регистрации`
                                                    &activationResourceId=`6`
                                                    &successMsg=`<p>Поздравляем! На вашу электронную почту отправлено письмо, содержащее ссылку, необходимую для активации аккаунта. Перейдите по этой ссылке, чтобы завершить процедуру регистрации.</p>`
                                                    &usergroups=`Members`
                                                    &usernameField=`login`
                                                    &generatePassword=`1`
                                                    &autoLogin=`1`
                                                    &validate=`nospam:blank,
                                                      ref_id:required,
                                                      fullname:required,
                                                      login:required:minLength=^4^,
                                                      email:required`
                                                    &placeholderPrefix=`reg.`
                                                ]]
                                                [[!+error.message:default=`[[!$RegisterFormTpl]]`]]
                                                
                                                Почтовый темплейт «из коробки», кеши сбрасывал, в логах пусто…
                                                Что с этим можно ещё сделать?
                                                1. Александр Мальцев
                                                  05 августа 2019, 13:23
                                                  Здравствуйте!
                                                  Скорее всего у вас сниппет вызывается 2 раза, проверьте редиректы.
                                                  Откройте консоль разработчика в браузере, выберите вкладку Network, поставьте галочку «Preserve log», чтобы лог не очищался при перезагрузке странице и проанализируйте его.
                                                  1. Толстый Ленивый Кот
                                                    06 августа 2019, 11:34
                                                    Увы, в консоли разработчика — один вызов registerme.html, в логах nginx с отладкой — два, но там видно, что это сперва POST, а потом сообщение «На вашу почту…», так что тоже не то. Замена registerme.html на index.html?q=registerme.html тоже видна и отрабатывает.
                                                    Видимо, не судьба :(
                                                    1. Толстый Ленивый Кот
                                                      06 августа 2019, 12:01
                                                      Дополню: проблема всё же решилась, но это уж точно «в Москву через Уренгой»… Всё заработало штатно после удаления восклицательного знака в вызове «[[Register?…» и убирании галочки «Кэшируемый» для него же. Такое решение для «восстановления пароля» нагуглилось где-то, и, как оказалось, это работает. Причём только и именно в такой комбинации! Хотя, казалось бы, «[[!Register» должен игнорировать кэширование как класс.
                                                      Криво, в общем, но если кому поможет — имейте в виду.
                                                2. Дмитрий
                                                  07 июня 2019, 22:46
                                                  Александр, у вас личный кабинет пользователя сделан на этом компоненте login? или вы что то свое написали? Если на Логин компоненте, то как сделали ajax обработку полей на нем?
                                                  1. Александр Мальцев
                                                    10 июня 2019, 02:13
                                                    Нет, по-другому.
                                                  2. Uncle_Pasha
                                                    11 февраля 2019, 13:26
                                                    Доброго дня.
                                                    А подскажите пожалуйста, какие-то настройки надо прописывать для почты MODX при реализации этого механизма с регистрацией пользователей? Пока что ничего не отправляет при регистрации тестового пользователя.
                                                    1. Александр Мальцев
                                                      12 февраля 2019, 15:19
                                                      Настройки почты в MODX находятся на странице Системные настройки & События (Шестерёнка -> Системные настройки -> Раздел «core» -> Фильтр «Почта»).
                                                      Если что-то не работает нужно смотреть журнал ошибок (Управление -> Отчеты -> Журнал ошибок).
                                                      1. Uncle_Pasha
                                                        12 февраля 2019, 21:38
                                                        Где настройки смотреть — это я уже понял. Вопрос был немного в другом: в настройки почты надо прописывать SMTP сервера гугла, яндекса и проч.? Чтобы сообщения отправлялись пользователям…
                                                        1. Александр Мальцев
                                                          14 февраля 2019, 16:14
                                                          Желательно конечно же использовать почту для домена и DKIM-подпись. Но можете и так.
                                                    2. Руслан
                                                      29 октября 2018, 18:11
                                                      Здравствуйте. Обнаружилась проблемка. При регистрации пользователя, у которого емейл адрес с точкой вида «ivan.ivanov@mail.ru», письмо с кодом активации ему на почту не доходит. На другие адреса при этом работает нормально. Никто не сталкивался? Помогите, пожалуйста.
                                                      1. Александр Мальцев
                                                        31 октября 2018, 15:00
                                                        Здравствуйте. Нужно смотреть какая возвращается ошибка, может дело вообще не в точке.
                                                      2. Руслан
                                                        04 октября 2018, 10:41
                                                        Здравствуйте! Спасибо огромное за информативный материал. Большое дело делаете для ещё не посвящённых)
                                                        У меня встал вопрос. Создал я дополнительную таблицу для пользователей (, а не стал добавлять свойства в user_attribute значения в поле extended или добавлять поля к этой таблице). Посчитал, что так будет лучше, на случай обновления MODx.
                                                        Подскажите, пожалуйста, кто знает, куда чего нужно дописать, чтобы ID новосозданного пользователя добавлялся в поле собственной таблицы? Со связью 1-к-1. Как с таблицей user_attributes. Предполагаю, что нужно где-то в файле процессора создания пользователя дописать строки со связями с этой таблицей. И в модель изменения нужно внести. Но вот докумекать пока не могу, где именно эти изменения сделать. Дайте наводку или на водку, пожалуйста))
                                                        1. Руслан
                                                          04 октября 2018, 11:53
                                                          нашёл в комментариях наводку)) itchief.ru/lessons/modx-revo/modx-how-to-add-additional-fields-to-the-resource Начал делать. Спасибо огромное.
                                                          1. Руслан
                                                            04 октября 2018, 13:22
                                                            Нет, всё-таки думаю, что проще и правильнее добавлять связь с таблицей users в файл register.php. Но один фиг пока ещё не понял точно как что делать. А, может, нужно схему сначала по вашей инструкции сделать, потом только register.php модернизировать? Дело в том, что у меня уже установлен CMP Generator, и я с ним до сих пор нормально работал. Не хотелось бы, чтобы эти компоненты не ладили друг с другом.
                                                            1. Александр Мальцев
                                                              06 октября 2018, 16:06
                                                              Для этого есть системные события onUserSave, onUserRemove и др. Можно создать плагин и при наступлении этих событий написать необходимую логику (например, добавлять строки в некоторую таблицу через xPDO).
                                                              1. Руслан
                                                                08 октября 2018, 11:34
                                                                Я ж таки добавил пару строк в процессор register.php, новый класс создал. Но, буду переделывать по вашему совету теперь, чтоб после обновления не было неприятностей
                                                                1. Руслан
                                                                  08 октября 2018, 08:50
                                                                  Спасибо большое за ответ. Надо мне таки расширять познания в части плагинов. До сих пор я их почти не касался.
                                                          2. Infoster
                                                            12 сентября 2018, 21:33
                                                            Здравствуйте!
                                                            Спасибо за подробную инструкцию.

                                                            У меня почему-то администратор не может получить доступ к страницам из созданной группы.
                                                            30 секунд ожидания и далее 502 ошибка.

                                                            Пользователь из этой группы страницы видит, полностью неавторизованный перекидывается на вход. С админом что-то ничего не прокатывает, в том числе добавление ему прав доступа на созданную группу ресурсов.
                                                            1. Infoster
                                                              13 сентября 2018, 07:41
                                                              Частично проблему решил – т. к. настроен один контекст на основном домене, второй — на поддомене, просто не было единой авторизации. Остался второй момент — с 502 ошибкой, если, к примеру, снять с публикации страницу регистрации для ее временного отключения, долго висит и затем 502. Полагаю, что с Login это уже не связано, но как решить, пока не понимаю.
                                                              1. Александр Мальцев
                                                                13 сентября 2018, 13:48
                                                                Здравствуйте! Ошибка 502 много из-за чего может происходит. В логах ничего нет?
                                                            2. Эд
                                                              01 сентября 2018, 07:22
                                                              Александр, добрый день!
                                                              Во-первых спасибо за статьи, мне как начинающему свой путь на данном поприще они очень полезны. Помогите пожалуйста разобраться со следующей проблемой: сайт не отправляет письмо для авторизации пользователя со ссылкой для подтверждения. modUser отрабатывает и неактивный user создается в группе Users, но письмо не отправляется на почту (спам тоже проверял). В чем может быть проблема?
                                                              1. Александр Мальцев
                                                                03 сентября 2018, 14:32
                                                                Добрый! Для отправки писем её нужно настроить в MODX. Осуществляется это в системных настройках в разделе «Почта».
                                                              2. Дмитрий
                                                                03 августа 2018, 10:23
                                                                Добрый день. Совсем недавно начал изучать веб-программирование, хочу сделать интернет-проект, выбрал для его построения MODX. Тяжеловато с моими знаниями, но пытаюсь. С Login возникли два вопроса (пока):
                                                                1) И при регистрации и при сбросе пароля сервер (локалка) отправляет 2 одинаковых письма. И при сбросе пароля как то не так работает — ссылки в обоих письмах уже «expaired»
                                                                2) Вы не выложили код личного кабинета, я так понял, за него отвечает [[!Profile]], но нужна еще форма какая то. взял ее код с другого ресурса, так у меня поля профайла показываются как пустые поля формы, не заполняются плейсхолдерами. возможно где то рассогласования имен не заметил. Но почему форма? Личный кабинет — это ж не «Изменение данных»… там просто все должно быть указано обычным тескстом…
                                                                3) ах да, еще третий вопрос. Почему все в инете создают окно общее для имени и фамилии? это очень неудобно для дальнейшей работы с базами и автоматизацией некоторых процессов. Потом возможны дубли и пр. и пр. Я создавал в форме регистрации еще одну строку, переименовывал обе, старался то же самое сделать в форме профайла… Но они пустые. Может я что то не учел в работе сниппета Profile? Вы о нем не написали.
                                                                4) У меня еще задача осложняется тем, что мне нужны три группы разных пользователей, с разным набором полей профиля, а значит — с разными регистрационными формами. При этом пункт в меню «Личный кабинет» — один… Там логику надо писать с переадресацией как я понимаю? На профиль каждого типа?
                                                                1. Александр Мальцев
                                                                  04 августа 2018, 08:31
                                                                  Добрый! Скорее всего, вы что-то неправильно настроили. Например, поместили несколько сниппетов компонента Login на одну страницу, вот у вас и отправляются 2 письма.
                                                                  Про третий пункт… Это зависит от задачи. В MODX поле fullname (полное имя) — это не обязательно имя и фамилия, это вообще может быть ник, под которым будут отображаться записи, созданные этим пользователем.
                                                                  Про четвёртый пункт… Переадресация никакая не нужна. На этой страницы сначала определите, к какой группе принадлежит авторизированный пользователь, а затем уже формируйте страницу с нужными данными.
                                                                  1. Дмитрий
                                                                    05 августа 2018, 02:53
                                                                    вот что дает OpenServer
                                                                    2018-08-05 01:07:12
                                                                    2018-08-05 01:07:13 Debug: Connecting to smtp.mail.ru:587
                                                                    2018-08-05 01:07:13 Debug: Authenticating as sds19@mail.ru
                                                                    2018-08-05 01:07:14 Debug: Authentication: OK
                                                                    2018-08-05 01:07:14 Debug: Sending message…
                                                                    2018-08-05 01:07:15 Debug: Completed. Send QUIT command.
                                                                    2018-08-05 01:07:16
                                                                    2018-08-05 01:07:16 Debug: Connecting to smtp.mail.ru:587
                                                                    2018-08-05 01:07:16 Debug: Authenticating as sds19@mail.ru
                                                                    2018-08-05 01:07:17 Debug: Authentication: OK
                                                                    2018-08-05 01:07:17 Debug: Sending message…
                                                                    2018-08-05 01:07:18 Debug: Completed. Send QUIT command.
                                                                    1. Александр Мальцев
                                                                      06 августа 2018, 15:27
                                                                      Не знаю с чем этом может быть связано, попробуйте на реальном хостинге.
                                                                    2. Дмитрий
                                                                      05 августа 2018, 02:17
                                                                      Благодарю…

                                                                      1) Сниппетов дублей нет… Скажите, а не может MODX отправлять письмо, и OpenServer тоже? потому что я настроил OpenServer на отправку, но в MODX ничего не настраивал… тем не менее может он берет настройки OpenServer и дублирует сообщения? Хотя с другой стороны, пока я не настроил OpenServer на отправку — сообщения в папке хранились. Что если убрать настройки с сервера, а MODX почту настроить? пока у меня только эта версия.
                                                                      3) Спасибо, Я так и переопределил это поле — как никнейм… а через «Extended» добавил поля… пока еще не проверял — надо ведь аналогичные поля и в профиле сделать. Как я понимаю… Сразу как решу вопрос с двумя письмами займусь…
                                                                      4) То есть форма с радио, которая делает активными те поля которые нужно для каждого пользователя? Как лучше? Через модификацию чанков например? или перед каждым блоком какой нибудь сниппет типа IF? И страницу «Профиль» тоже можно одну делать на все типы или на каждую свой? Это же влечет за собой и страницу изменения профиля.

                                                                      Скажите, я с логикой пока не очень — если есть стандартная радиоформа без логики — какой результат она дает «в чистом виде, без обработки? Что какая то переменная (напр reg.type) равна одному из типов? Или что один из типов имеет статус (атрибут) checked? Просто от этого зависит
                                                                      1. Александр Мальцев
                                                                        06 августа 2018, 15:25
                                                                        Регистрационную форму, а именно её логику на клиенте можно реализовать с помощью JavaScript.
                                                                        Страницу «Профиль» можно сделать одну для всех пользователей.
                                                                        Как добавить radio на форму и её обработать, можно посмотреть в комментариях в этой теме и FormIt.
                                                                    3. Дмитрий
                                                                      03 августа 2018, 18:00
                                                                      Чтобы вводить отдельно имя и фамилию я добавил строчку и поменял имена… В результате форма требует в поле фамилии ввести электронный адрес… и когда я ввожу — отправляет ДВА электронных письма. Это уже в сниппетах так заложено?

                                                                      1. Александр Мальцев
                                                                        04 августа 2018, 08:37
                                                                        Если вам полей не хватает, то это можно организовать, например, с помощью дополнительных полей (extended).
                                                                    4. maxim
                                                                      18 июля 2018, 15:37
                                                                      Добрый день, подскажите пожалуйста как лучше сделать, какие модули использовать и логику действий для решения следующей задачи:

                                                                      На сайте есть много форм, скачать, заказать, купить
                                                                      Пользователь все время заполняет одни и те же поля: email, телефон (иногда и имя)

                                                                      Как сделать чтобы при одном заполнении такой формы пользователь регистрировался и автоматизировался на сайте (одновременно) А пароль ему высылался на email.
                                                                      А если такой пользователь существует (по email проверяет) то при заполнении такой формы (это если он разлогинется) ему выскакивает сообщение что: вы уже зарегистрированы, проверьте свою почту там будет пароль и вам нужно авторизироваться, что-то в этом роде
                                                                      1. Александр Мальцев
                                                                        19 июля 2018, 14:55
                                                                        Так пользователь может указать не свой email. Всё равно он должен подтвердить, что он принадлежит ему.
                                                                        А так, если вы используете FormIt, сначала необходимо создать сниппет, который будет создавать пользователя и добавлять его в группу. Поместить данный сниппет, необходимо после отправки сообщения, т.е. после хука email. В своём сниппете создавайте нужные проверки и др.
                                                                        Для создания пользователя и добавления в группу можно воспользоваться стандартными механизмами MODX:
                                                                        $user = $modx->newObject('modUser');
                                                                        $user->set('username', 'Новый пользователь');
                                                                        $user->set('password', '1234567890');
                                                                        ...
                                                                        
                                                                        Если нужно выполнять какие-то проверки и действия до отправки такой формы на email, то делаете всё аналогично, только вызов сниппета помещаете до хука email.
                                                                        1. maxim
                                                                          19 июля 2018, 15:15
                                                                          Там важнее чтобы он указал верный телефон…
                                                                          Спасибо большое, буду пробовать.
                                                                      2. Tatyana
                                                                        13 июня 2018, 09:18
                                                                        Добрый день, Александр! Извините пожалуйста за беспокойство и глупые вопросы.
                                                                        Установили компонент login. Теперь у нас стоит задача: Мы создали ресурс на сайте «Пройти тест „Самодиагностика“. Войдя на эту вкладку посетитель должен зарегистрироваться прежде чем пройти тесты. Где и как проложить пути?
                                                                        1. Александр Мальцев
                                                                          13 июня 2018, 13:55
                                                                          Добрый! Если всё сделали по этой инструкции, то необходимо ресурс «Пройти тест Самодиагностика» добавить в группу ресурсов «Users». После этого доступ к этому ресурсу будут иметь пользователи группы Users, и др. пользователи имеющие доступ к этой группе ресурсов.

                                                                          Если гость (неавторизованный пользователь) захочет попасть на этот ресурс, то MODX его не пустит, и он будет перенаправлен на ресурс, который указан в параметре unauthorized_page. Этот параметр находится по следующему пути: значок «Шестеренка» -> пункт «Системные настройки» -> раздел «core» -> фильтр по разделу «Сайт». В качестве значения этого параметра необходимо указать id ресурса, на который необходимо перевести пользователя, если он попытается получить доступ к ресурсу, на который он не имеет прав.
                                                                        2. Ник
                                                                          25 мая 2018, 22:02
                                                                          Александр, здравствуйте. Прошу помочь.
                                                                          Использую расширение office как у вас на сайте. В личном кабинете мне очень понравилась таблица статистики. Загорелся, делаю себе такую же, но застопорился. Нигде не нашел информации как вывести общее количество комментариев, сделанное пользователем. Объясните, пожалуйста.

                                                                          P.S.
                                                                          У меня на сайте office работает вместе с minishop2. В эту статистику также хотел добавить информацию о количестве заказов, сделанных пользователем на сайте, но также не смог понять. Эта просьба не по теме, извините.
                                                                          1. Александр Мальцев
                                                                            27 мая 2018, 07:15
                                                                            Здравствуйте!
                                                                            Это можно выполнить, например, с помощью сниппета pdoUsers (из коллекции pdoTools) и дополнительного сниппета prepareUser:
                                                                            [[!pdoUsers? 
                                                                              &users=`[[!+modx.user.id]]`
                                                                              &prepareSnippet=`prepareUser`
                                                                              &tpl=`@INLINE Дата регистрации: [[+registered]], количество комментариев: [[+totalComments]], количество тикетов: [[+totalTickets]]`
                                                                            ]]
                                                                            
                                                                            Код сниппета prepareUser:
                                                                            <?php
                                                                            // количество комментариев
                                                                            $row['totalComments'] = $modx->getCount('TicketComment', array('createdby' => $row['id'], 'published' => 1));
                                                                            // количество тикетов
                                                                            $row['totalTickets'] = $modx->getCount('Ticket', array('createdby' => $row['id'], 'class_key' => 'Ticket', 'published' => 1, 'deleted' => 0));
                                                                            // дата регистрации пользователя (с использованием сниппета dateAgo для форматирования даты)
                                                                            $row['registered'] = !empty($row['extended']['registered']) ? $modx->runSnippet('dateAgo', array('input' => $row['extended']['registered'])) : '-';
                                                                            // дата последней активности пользователя (с использованием сниппета dateAgo для форматирования даты)
                                                                            $row['lastactivity'] = !empty($row['extended']['lastactivity']) ? $modx->runSnippet('dateAgo', array('input' => $row['extended']['lastactivity']))	: '-';
                                                                            
                                                                            Для minishop2 вам необходимо написать дополнительный запрос в prepareUser и получить количество записей с помощью функции getCount.
                                                                            1. Ник
                                                                              27 мая 2018, 18:08
                                                                              Александр, благодарю за ответ.
                                                                              Видимо я что-то делаю не так, но у меня данные не отображаются.
                                                                              Отдельно сниппет prepareUser частично работает. Если изменить $row['id'] на $modx->user->id] работают $row['totalTickets'] и $row['totalComments'].
                                                                              Ваш вызов pdoUsers не показывает ничего. Даже нулей. В логах ошибок не пишет.
                                                                              У меня pdoTools 2.11.1-pl, Modx — 2.6.2.
                                                                              Вызов pdoUsers с пустым шаблоном:
                                                                              Array
                                                                              (
                                                                                  [id] => 2
                                                                                  [internalKey] => 2
                                                                                  [fullname] => Nik
                                                                                  [email] => aewr-eweqt@yandex.ru
                                                                                  [phone] => 
                                                                                  [mobilephone] => 9859294152
                                                                                  [blocked] => 0
                                                                                  [blockeduntil] => 0
                                                                                  [blockedafter] => 0
                                                                                  [logincount] => 7
                                                                                  [lastlogin] => 1527415147
                                                                                  [thislogin] => 1527415189
                                                                                  [failedlogincount] => 0
                                                                                  [sessionid] => 746ea971c7b382310a4fd929dd32c5a8
                                                                                  [dob] => 0
                                                                                  [gender] => 0
                                                                                  [address] => 
                                                                                  [country] => 
                                                                                  [city] => 
                                                                                  [state] => 
                                                                                  [zip] => 
                                                                                  [fax] => 
                                                                                  [photo] => /assets/images/users/3cbd16ff046e2f934a2c6bbc3692a7fe.jpg
                                                                                  [comment] => 
                                                                                  [website] => 
                                                                                  [extended] => Array
                                                                                      (
                                                                                          [passwd] => 12345
                                                                                          [passwdAgain] => 12345
                                                                                      )
                                                                              
                                                                                  [username] => aewr-eweqt@yandex.ru
                                                                                  [password] => lCNA4rOGZYHU+Fm954EADLznnfoWd2QiTtzSoD9K/QU=
                                                                                  [cachepwd] => 
                                                                                  [class_key] => modUser
                                                                                  [active] => 1
                                                                                  [remote_key] => 
                                                                                  [remote_data] => 
                                                                                  [hash_class] => hashing.modPBKDF2
                                                                                  [salt] => 5071ad14ea1e135f0ff7161496e04d7e
                                                                                  [primary_group] => 0
                                                                                  [session_stale] => a:1:{i:0;s:3:"mgr";}
                                                                                  [sudo] => 0
                                                                                  [createdon] => 1524163811
                                                                                  [idx] => 1
                                                                                  [link] => 
                                                                              )

                                                                              Решил пока проблему так (коряво, но работает):
                                                                              Создал два отдельных сниппета — User_orders (выводит количество заказов):
                                                                              <?php
                                                                              // количество заказов
                                                                              $all_orders = $modx->getCount('msOrder', ['user_id' => $modx->user->id]);
                                                                              echo $all_orders;
                                                                              и User_comments:
                                                                              <?php
                                                                              // количество комментариев
                                                                              $all_comments = $modx->getCount('TicketComment', array('createdby' =>  $modx->user->id, 'published' => 1));
                                                                              echo $all_comments;
                                                                              И их вызываю в таблице статистики.

                                                                              Дату регистрации получаю через сниппет officeAuth:
                                                                              [[!officeAuth?
                                                                                   &tplLogout=`nav.LK`
                                                                              ]]
                                                                              В чанке вставляю плейсхолдер [[+createdon:dateAgo]]
                                                                              1. Александр Мальцев
                                                                                28 мая 2018, 14:41
                                                                                Трудно сказать, должно и так работать. Попробуйте вместо @inline использовать «реальный» чанк.
                                                                          2. Александр
                                                                            19 апреля 2018, 22:48
                                                                            Александр, добрый день. У меня проблема с активацией, есть ссылка: href=«site.ru/confirm?lp=OGh5OXdtc2I&lu=cXdkd3Fkd3Fkd3FAc2Vmc2Yuc2Zz». При переходе по такой ссылке, сниппет [[ConfirmRegister]] перебрасывает на страницу ошибки. Естественно аккаунт не активируется. Но если же вместо & поставить просто & то всё прекрасно активируется. Так что же делать в данном случае? Как исправить ссылку?
                                                                            1. Александр Мальцев
                                                                              20 апреля 2018, 13:44
                                                                              Добрый день! Проблема на настоящем хостинге или локальном сервере?
                                                                              1. Александр
                                                                                22 апреля 2018, 14:29
                                                                                на локальном, но проблема решена! Оказывается стоял амперсант, поэтому я просто подставил в ссылку фильтр :replace=`& amp==&`. А могла бы возникнуть данная проблема на настоящем хостинге?
                                                                                1. Александр Мальцев
                                                                                  23 апреля 2018, 17:04
                                                                                  Нет, не должна.
                                                                            2. Анатолий
                                                                              30 марта 2018, 12:52
                                                                              Добрый день.
                                                                              Александр, Ваш сайт великолепен. Нахожу на нем ответы на множество вопросов. Спасибо за сайт.
                                                                              Использую его как учебник и образец.
                                                                              Подскажите, как по окончании успешного заполнения формы регистрации новым пользователем
                                                                              сообщить ему в браузере «Уважаемый имярек регистрация проходит успешно, на Ваш емейл отправлено письмо активизации регистрации. Для завершения процесса регистрации осталась сама малость. Обязательно нажмите на ссылку в письме активации регистрации.»
                                                                              1. Александр Мальцев
                                                                                01 апреля 2018, 13:12
                                                                                Здравствуйте! Спасибо.
                                                                                Для этого необходимо создать дополнительный ресурс и разместить на нём приведённое выше сообщение.
                                                                                После этого необходимо в сниппет Register добавить параметр submittedResourceId и указать в качестве значения id созданного ресурса.
                                                                                [[!Register? 
                                                                                    &submittedResourceId=`14`
                                                                                    ...    
                                                                                ]]
                                                                                
                                                                                Теперь после отправки регистрационной формы будет происходить перенаправление на ресурс с id, равным 14.
                                                                              2. Vasyl
                                                                                21 марта 2018, 14:33
                                                                                Добрый день. Столкнулся со следующей задачей. Можно ли как-то сделать так чтоб скачивать файлы с сайта могли только зарегистрированные пользователи? Например пользователь заходит на сайт. Хочет скачать файл по ссылке, его перекидывает на страницу регистрации или авторизации. После регистрации или авторизации он может скачивать файлы по ссылкам на сайте. Как это реализовать? :)
                                                                                1. Александр Мальцев
                                                                                  22 марта 2018, 15:26
                                                                                  Это можно выполнить по-разному.
                                                                                  Например, в ссылках можно хранить не путь к файлу, а ссылку на некоторую промежуточную страницу (например, downloads) и GET-параметр.
                                                                                  <a href="/downloads?id=7">Скачать</a>
                                                                                  В админке MODX создать эту промежуточную страницу и дать доступ к ней только авторизированным пользователем. На этой странице необходимо будет написать логику, которая будет в зависимости от значения id выдавать ссылку для кнопки расположенной на этой странице. Т.к. не зарегистрированные пользователи не будут иметь доступ к этой странице, то они не смогут скачать этот файл.
                                                                                  Для надёжности в качестве значения id можете использовать сгенерированный по некоторому алгоритму хэш код.

                                                                                  Другой вариант это использовать фильтры. Например, при каждой генерации страницы проверять, авторизирован ли пользователь, и если да, то подставлять ссылку.
                                                                                  <a href="[[!+modx.user.id:isloggedin:is=`1`:then=`путь_до_файла`:else=`путь_к_странице_авторизации`]]">Скачать</a>
                                                                                  1. Vasyl
                                                                                    27 марта 2018, 12:10
                                                                                    Спасибо большое! Если будут возникать вопросы, буду писать сюда! :)
                                                                                2. giru
                                                                                  21 января 2018, 16:32
                                                                                  Используем так же снипет Login. Написали снипет для modx. Сайт . Снипет был написан для того чтобы заблокировать доступ к уроку 2 для незарегистрированного юзера, а если он зарегистрирован то открыть доступ. Так же для 3 урока, только для доступа здесь отправляет на оплату. Снипет вроде написан верно, но он не работает. На сколько мы поняли что дело в сессии, но мы не знаем как она формируется в данном снипете(т.е. id сессии ).
                                                                                  Подскажите как узнать или где найти как формируется id сессии.
                                                                                  Изначально планировали без использования данного снипета и id сессии формировался с помощью функции time();
                                                                                  <?php
                                                                                  session_start();
                                                                                  if ($_GET['lesson']==2)
                                                                                  {
                                                                                      if (!isset($_SESSION['login']))
                                                                                      {
                                                                                          header("Location: /avtorizacziya");
                                                                                          die();
                                                                                      }
                                                                                      else 
                                                                                      {
                                                                                          header("Location: /lesson.html?lesson=2");
                                                                                          die();
                                                                                      }
                                                                                  }
                                                                                  if ($_GET['lesson']==3)
                                                                                  {
                                                                                      if (!isset($_SESSION['login']))
                                                                                      {
                                                                                          header("Location: /avtorizacziya");
                                                                                          die();
                                                                                      }
                                                                                      else
                                                                                      {
                                                                                          header("Location: /pay");
                                                                                          die();
                                                                                      }
                                                                                  }
                                                                                  1. Александр Мальцев
                                                                                    22 марта 2018, 15:32
                                                                                    Для этого необходимо просто создать группу для ресурсов, доступ к которой, разрешить авторизированным пользователям. Аналогично для ресурсов, доступ к которым нужно предоставить только после оплаты.
                                                                                  2. Ленур
                                                                                    13 января 2018, 23:28
                                                                                    Здравствуйте, у меня возникла проблема следующего характера:
                                                                                    при создании и активации учетной записи на сайте, страницы авторизации и регистрации перестают загружать.
                                                                                    Если удалить созданную учетную запись из админки, то страницы сразу загружаются, подскажите в чем может быть проблема и пути её решения?
                                                                                    Спасибо.
                                                                                    1. Александр Мальцев
                                                                                      14 января 2018, 06:36
                                                                                      Здравствуйте!
                                                                                      Не знаю, не сталкивался с этим. Попробуйте посмотреть ошибки в логах.
                                                                                    2. Евгений
                                                                                      16 декабря 2017, 12:48
                                                                                      Здравствуйте, Александр,
                                                                                      сделал по вашему уроку страничку регистрации и обнаружил, что все поля, кроме поля «Email:» подвержены XSS уязвимости. Воспроизводится это так, нужно в любое поле вставить
                                                                                      это '" onMouseOver=«alert(1);' В начале стоит двойная кавычка и перед alert тоже двойная
                                                                                      кавычка. Затем нажимаем кнопку „Далее“, теперь если навести мышку на поле в которое ввели этот код, то выскочит окошко с единичкой.
                                                                                      Скажите пожалуйста, как проверять введенные данные?
                                                                                      1. Александр Мальцев
                                                                                        19 декабря 2017, 14:43
                                                                                        Здравствуйте! Для этого необходимо удалять все эти теги из строки. Для этого можно использовать валидатор stripTags.
                                                                                        [[!Register?
                                                                                            &submitVar=`submitbtn`
                                                                                            &activation=`1`
                                                                                            &activationEmailSubject=`Подтверждение регистрации`
                                                                                            &activationResourceId=`31`
                                                                                            &successMsg=`<p>Спасибо за регистрацию. На вашу электронную почту [[!+reg.email]] отправлено письмо, содержащее ссылку, необходимую для активацию аккаунта. Перейдите по этой ссылке, чтобы завершить процедуру регистрации.</p>`
                                                                                            &usergroups=`Users`
                                                                                            &usernameField=`email`
                                                                                            &passwordField=`passwd`    
                                                                                            &validate=`nospam:blank,
                                                                                              passwd:required:stripTags:minLength=^8^,
                                                                                              passwdAgain:stripTags:passwdAgain=^passwd^,
                                                                                              fullname:required:stripTags,
                                                                                              email:required:email`
                                                                                            &placeholderPrefix=`reg.`
                                                                                        ]]
                                                                                        Кроме этого сейчас все современные браузеры блокируют это (ERR_BLOCKED_BY_XSS_AUDITOR).
                                                                                        1. Евгений
                                                                                          20 декабря 2017, 12:00
                                                                                          Здравствуйте, Александр, спасибо за ответ. К сожалению валидатор stripTags никак не влияет. На всякий случай проверил какие браузеры это блокируют. Оказалось только Opera и Chrom, а Firefox, Microsoft Edge, Internet Explorer 11 не блокируют. Может есть еще какие-то валидаторы, или может как-то свой валидатор вставить?
                                                                                          1. Александр Мальцев
                                                                                            20 декабря 2017, 13:46
                                                                                            Проверил, работает!
                                                                                            Может вы вызываете сниппет кэшированным?

                                                                                            1. Евгений
                                                                                              20 декабря 2017, 15:47
                                                                                              Нет, сниппет вызывается некэшированным, я скопировал ваш пример выше. Кеш браузера тоже почистил. Если посмотреть исходный код страницы после вставки XSS то будет вот такая строка:
                                                                                              <input type="text" name="fullname" class="form-control" id="fullname" placeholder="Как Вас зовут" value="" onMouseOver="alert(1);">
                                                                                              Буду разглядывать код под «микроскопом», может где-то еще ошибки.
                                                                                              1. Александр Мальцев
                                                                                                20 декабря 2017, 16:45
                                                                                                Можете попробывать использовать strip:
                                                                                                fullname:strip=^"^:required,
                                                                                                1. Евгений
                                                                                                  20 декабря 2017, 17:17
                                                                                                  О, отлично, это помогло, спасибо!
                                                                                      2. evgen
                                                                                        15 декабря 2017, 16:16
                                                                                        Все делал по уроку
                                                                                        1. evgen
                                                                                          15 декабря 2017, 16:15
                                                                                          Доброго времени суток Александр! Подскажите пожалуйста по какой причине может не активироваться пользователь. я уже по нескольким урокам пытаюсь реализовать, но всегда во вкладке активный написано нет. Все делал по уроку. Спасибо.
                                                                                          1. Александр Мальцев
                                                                                            18 декабря 2017, 05:10
                                                                                            Для того чтобы пользователь стал активным, он должен перейти по ссылке, которую он получил в письме. Страница, на которую ведёт эта ссылка, должна содержать вызов сниппета ConfirmRegister. Он то и переводит флажок «Активный» во включенное состояние.
                                                                                            1. evgen
                                                                                              18 декабря 2017, 16:12
                                                                                              Александр здравствуйте! спасибо за ответ. Но у меня есть страница подтверждения с таким содержанием
                                                                                              [[!ConfirmRegister?
                                                                                              &authenticate=`1`
                                                                                              &redirectTo=`7`
                                                                                              &errorPage=`7`
                                                                                              ]]
                                                                                              на следующих скриншотах запечатлен процесс регистрации и активации

                                                                                              itchief.ru/assets/uploadify/4/3/8/438dcef39e5d623e7ab1f95a407a7843.png
                                                                                              itchief.ru/assets/uploadify/a/7/c/a7c3b13bf88d762b0c825b5ef14791de.png
                                                                                              itchief.ru/assets/uploadify/8/7/1/871fbff889a59aeaa5cbdff61cb0d94b.png
                                                                                              itchief.ru/assets/uploadify/b/d/4/bd426c5135db70f8af4c1989bfba9903.png
                                                                                              itchief.ru/assets/uploadify/c/b/2/cb226bc0b43e080b49d58d8f908d9651.png
                                                                                              itchief.ru/assets/uploadify/8/8/4/884412323aa60c57dd43def9fee37784.png
                                                                                              1. Александр Мальцев
                                                                                                18 декабря 2017, 16:21
                                                                                                Если вы осуществляете переход по ссылке вручную, то
                                                                                                &amp;
                                                                                                необходимо заменить на &.
                                                                                                1. evgen
                                                                                                  18 декабря 2017, 16:31
                                                                                                  заменил — все равно не активный
                                                                                                  1. Александр Мальцев
                                                                                                    18 декабря 2017, 16:47
                                                                                                    Если вы пользователя регистрировали давно (по умолчанию больше 3 часов назад), то вы не сможете его активировать по указанной ссылке. Она будет уже не действительной. В этом случае необходимо ещё раз запросить ссылку.

                                                                                                    Ещё один момент. Эти действия лучше производить в другом браузере или из режима инкогнито. Чтобы авторизация текущего пользователя в админке (admin), не влияла на эти действия.
                                                                                                    1. evgen
                                                                                                      18 декабря 2017, 17:24
                                                                                                      насчет времени каждый раз нового делаю и кэш чищу. а по поводу другого браузера — все равно не активирует
                                                                                                      1. Александр Мальцев
                                                                                                        19 декабря 2017, 02:23
                                                                                                        Надо тогда посмотреть ошибки в логах. Может тогда станет понятно почему не работает.
                                                                                                        Можно также попробывать обновить MODX на эту же версию, которая у вас стоит или на более новую. И переустановить компонент Login.
                                                                                                        1. evgen
                                                                                                          19 декабря 2017, 10:01
                                                                                                          Большое спасибо Александр. На хостинге сработало с другого браузера.
                                                                                          2. Павел
                                                                                            22 октября 2017, 21:20
                                                                                            Здравствуйте!
                                                                                            Спасибо за внятное объяснение и приятный дизайн Вашего сайта!
                                                                                            Подскажите, пожалуйста — как предоставить пользователю выбирать себе группу при регистрации?
                                                                                            Например, мы на форме ставим несколько радиокнопок
                                                                                                <p><input name="group" type="radio" value="Users">Users</p>
                                                                                                <p><input name="group" type="radio" value="UsersFL">UsersFL</p>
                                                                                                <p><input name="group" type="radio" value="UsersJL" checked>UsersJL</p>
                                                                                                <p><input name="group" type="radio" value="UsersIP">UsersIP</p>
                                                                                            
                                                                                            Нужно, чтоб значение выбранной радиокнопки отправлялось в параметр &usergroups сниппета Register.

                                                                                            Я пробовал так:

                                                                                            [[!Register?
                                                                                               .....
                                                                                                &usergroups=`group`.
                                                                                            .....
                                                                                            ]]
                                                                                            и вот так

                                                                                            [[!Register?
                                                                                               .....
                                                                                                &usergroups=`$_POST['group']`.
                                                                                            .....
                                                                                            ]]
                                                                                            Оба варианта отправляют ключ=значение в дополнительные поля данных…
                                                                                            Как вариант, конечно можно на странице сделать табы из этих радиокнопок, выводить на каждой вкладке сниппет с нужными параметрами и форму тоже с нужными полями, но код странички очень громоздкий получается… Может есть более универсальный вариант?
                                                                                            1. Александр Мальцев
                                                                                              23 октября 2017, 17:10
                                                                                              Здравствуйте!
                                                                                              Чтобы получить значение ключа POST нужно написать сниппет или использовать такую конструкцию (если установлен pdoTools):
                                                                                              [[#POST.key]]
                                                                                              
                                                                                              Т.е.
                                                                                              [[!Register?
                                                                                                  &usergroups=`[[#POST.group]]`
                                                                                                  ...
                                                                                              ]]
                                                                                              Кроме этого необходимо ещё написать валидацию, чтобы пользователь мог попасть только в одну из этих групп.
                                                                                              1. Павел
                                                                                                23 октября 2017, 18:37
                                                                                                Благодарю за оперативный ответ!
                                                                                                [[#POST.group]] — этот вариант сработал бы в чанке сниппета из pdoTools, на столько я успел разобраться…
                                                                                                У меня же код расположен в contetn ресурса «Регистрация» — у меня этот вариант не сработал…

                                                                                                Спасся простеньким сниппетом:
                                                                                                getPOSTkey
                                                                                                <?php
                                                                                                if (isset($_POST)){
                                                                                                    $k = $_POST[$key];
                                                                                                    return $k;
                                                                                                }
                                                                                                Вызвал так:
                                                                                                [[!Register?
                                                                                                ...
                                                                                                    &usergroups=`[[!getPOSTkey? &key=`group`]]`
                                                                                                ...
                                                                                                ]]
                                                                                                
                                                                                                Зато теперь знаю, как получить значения ключей $_POST массива в pdoTools.

                                                                                                Спасибо!
                                                                                            2. Impulse
                                                                                              11 октября 2017, 17:40
                                                                                              Добрый вечер. Использовал код у вас в примере, ID ресурсов выставил свои. Только вот после регистрации страница просто обновляется, письмо не приходит, журнал ошибок пуст.
                                                                                              1. Александр Мальцев
                                                                                                18 октября 2017, 15:09
                                                                                                Здравствуйте! Пользователь создаётся? Проверьте поддерживает ли хостинг отправку писем.
                                                                                                1. Impulse
                                                                                                  18 октября 2017, 16:41
                                                                                                  Добрый вечер! Проблему решил, регистрация проходит, пользователь создается, но письмо на почту по прежнему не приходит, отправку писем хостинг поддерживает
                                                                                                  1. Александр Мальцев
                                                                                                    19 октября 2017, 15:55
                                                                                                    Добрый день. Проверьте настройки почты (Системные настройки -> Разделы «Почта» и «Авторизация и безопасность»).
                                                                                                    1. Impulse
                                                                                                      19 октября 2017, 16:14
                                                                                                      Добрый день, в разделе авторизация все по умолчанию стоит, раздел почта настроен так: Изображение 1
                                                                                                      1. Александр Мальцев
                                                                                                        19 октября 2017, 16:51
                                                                                                        Проверьте ещё значение системной настройки emailsender.
                                                                                                        1. Impulse
                                                                                                          19 октября 2017, 17:04
                                                                                                          Значение системной настройки emailsender такое же как и mail_smtp_user то есть один и тот же ящик указан
                                                                                                          1. Александр Мальцев
                                                                                                            19 октября 2017, 17:15
                                                                                                            Не знаю, в этом случае должно работать. Попробуйте проверить ещё раз, может что-то где-то упустили.
                                                                                                            1. Impulse
                                                                                                              20 октября 2017, 12:41
                                                                                                              Все настроено верно, выяснил что письмо даже не отправляется, вот мой код, что тут может быть не так:
                                                                                                              [[!Register?
                                                                                                                  &submitVar=`submitbtn`
                                                                                                              	&activationResourceId=`18`
                                                                                                                  &activationEmailTpl=`lgnActivateEmailTpl`
                                                                                                                  &activationEmailSubject=`Спасибо за регистрацию!`
                                                                                                                  &successMsg=`<p>Спасибо за регистрацию. На вашу электронную почту <strong>[[+email]]</strong> отправлено письмо, содержащее ссылку, необходимую для активацию аккаунта. Перейдите по этой ссылке, чтобы завершить процедуру регистрации.</p>`
                                                                                                              	&usergroups=`Users`
                                                                                                              ]]
                                                                                                              <div class="register">
                                                                                                                  <div class="registerMessage">[[+error.message]]</div>
                                                                                                                  <form class="form" action="[[~[[*id]]]]" method="post">
                                                                                                                      <input type="hidden" name="nospam:blank" value="" />
                                                                                                                      <div class="register-row">
                                                                                                              			<label for="username">[[%register.username? &namespace=`login` &topic=`register`]] [[+error.username]]	</label>
                                                                                                              			<input type="text" name="username:required" id="username" value="[[+username]]" />
                                                                                                              		</div>
                                                                                                              		<div class="register-row">
                                                                                                              			<label for="email">[[%register.email]] [[+error.email]]</label>
                                                                                                              			<input type="text" name="email" id="email" value="[[+email]]" />
                                                                                                              		</div>
                                                                                                              		<div class="register-row">
                                                                                                              			<label for="password">[[%register.password]] [[+error.password]]</label>
                                                                                                              			<input type="password" name="password:required" id="password" value="[[+password]]" />
                                                                                                              		</div>
                                                                                                              		<div class="register-row">
                                                                                                              			<label for="password_confirm">[[%register.password_confirm]] [[+error.password_confirm]]</label>
                                                                                                              			<input type="password" name="password_confirm:password_confirm=`password`" id="password_confirm" value="[[+password_confirm]]" />
                                                                                                              		</div>
                                                                                                              
                                                                                                                      <input type="submit" class="register-btn" name="submitbtn" value="Регистрация" />
                                                                                                                  </form>
                                                                                                              </div>
                                                                                                              
                                                                                              2. Александр
                                                                                                08 октября 2017, 05:23
                                                                                                Александр Здравствуйте! Есть такая проблема, если аноним зарегистрировался перешёл по ссылке в письме, автоматом авторизовался, но в группе users его нет он авторизованный аноним, почему так происходит уже долгое время ломаю голову не могу найти причину, его же должно автоматом после регистрации переносить в группу Users, с чем эта проблема может быть связана?
                                                                                                1. Александр Мальцев
                                                                                                  18 октября 2017, 15:05
                                                                                                  Добрый день!
                                                                                                  Группу, в которую необходимо поместить пользователя, необходимо указать в параметре usergroups:
                                                                                                  [[!Register?
                                                                                                      &usergroups=`Users`
                                                                                                  
                                                                                                2. Ми
                                                                                                  20 сентября 2017, 06:06
                                                                                                  Доброго времени суток!
                                                                                                  Подскажите, каким образом в админке сделать сортировку пользователей по id уже изначально, так как сейчас идет по имени???

                                                                                                  Заранее спасибо

                                                                                                  картинка
                                                                                                  itchief.ru/assets/uploadify/f/b/c/fbc907ae3ab331df797860e772e58564.jpg
                                                                                                  1. Александр Мальцев
                                                                                                    22 сентября 2017, 15:10
                                                                                                    Здравствуйте!
                                                                                                    Необходимо открыть файл \core\model\modx\processors\security\user\getlist.class.php и изменить свойство defaultSortField:
                                                                                                    public $defaultSortField = 'id';
                                                                                                    
                                                                                                  2. Илья
                                                                                                    18 сентября 2017, 17:59
                                                                                                    Добрый день! Хочу написать выгрузку юзеров и автоматическую регистрацию из csv используя данное дополнение.
                                                                                                    В csv таблице есть стандартные поля типа e-mail, имя и телефон. Написал снипет который разбирает таблицу в массив используя цикл for. Как я понимаю мне нужно в теле цикла при каждой итерации вызывать отработку сниппета [[!Register?]] и передавать ему переменные со значениями полей(e-mail, имя и телефон). Не подскажите как мне это реализовать?
                                                                                                    1. Александр Мальцев
                                                                                                      19 сентября 2017, 15:03
                                                                                                      Добрый день!
                                                                                                      Для данной задачи не вижу смыла использовать компонент Login.
                                                                                                      Добавить пользователя в систему можно так:
                                                                                                      <?php
                                                                                                      
                                                                                                      // создаем пользователя
                                                                                                      $user = $modx->newObject('modUser');
                                                                                                      // задаем имя пользователя и пароль
                                                                                                      $user->set('username', 'Имя пользователя');
                                                                                                      $user->set('password', 'Пароль пользователя');
                                                                                                      // сохраняем пользователя
                                                                                                      $user->save();
                                                                                                      
                                                                                                      // создаем профиль
                                                                                                      $profile = $modx->newObject('modUserProfile');
                                                                                                      // устанавливаем поля
                                                                                                      $profile->set('fullname', 'Полное имя пользователя');
                                                                                                      $profile->set('email', 'user@mysite.ru');
                                                                                                      // добавляем профиль пользователю
                                                                                                      $user->addOne($profile);
                                                                                                      
                                                                                                      // сохраняем
                                                                                                      $profile->save();
                                                                                                      $user->save();
                                                                                                      
                                                                                                      1. Илья
                                                                                                        19 сентября 2017, 15:40
                                                                                                        Благодарю за ответ! Я пользую подтверждение емайла и автосоздание пароля. то есть человек может просто ввести емайл и нажать зарегестрироваться. Далее к нему на почту идет письмо с подтверждением регистрации. На странице подтверждения у меня сниппет который добавляет подписку к закрытому контенту на 1 месяц. Сообщение и отправку для подтверждения емайла делает дополнение Login. У нас проходят курсы где участвуют порядка 100 человек. есть ексель файл с емайлами участников. Чтобы каждый не регистрировался вручную руководство хочет скрипт чтобы контент менеджер загружал экселевский файл и все 100 человек зарегестрирровались и получили письмо с потдверждением регистрации. на странице потдверждения отрабатывает снипет который добавляет юзеру подписку на скрытый контент на месяц. Csv нужен только лишь для быстрого импорта судентов(юзеров). Если использовать ваш код что вы написали боюсь много придется дописывать вручную что уже есть в данном компоненте… может вы еще что то можете подсказать?
                                                                                                        1. Александр Мальцев
                                                                                                          19 сентября 2017, 16:34
                                                                                                          Сниппет Register не заточен под такую задачу. Ему нельзя так просто передать данные. В любом случае придётся что-то дописывать.
                                                                                                    2. Владимир
                                                                                                      10 сентября 2017, 22:54
                                                                                                      Доброго времени суток) а не подскажете как сделать автоматическую блокировку пользователя при регистрации?(это нужно что бы потом вручную делать разблокировку на некоторое время). А то смотрел содержимое плагинов Login и хотел сделать по аналогии с активацией, но так не нашел нужного(
                                                                                                      1. Александр Мальцев
                                                                                                        11 сентября 2017, 16:07
                                                                                                        Здравствуйте!
                                                                                                        Для этого необходимо добавить в сниппет Register хук, в котором нужно установить полю пользователя blocked значения 1.
                                                                                                        [[!Register?
                                                                                                            &preHooks=`rhUserBlocked`
                                                                                                            ...
                                                                                                        
                                                                                                        Сниппет rhUserBlocked:
                                                                                                        <?php
                                                                                                        $hook->setValue('blocked',1);
                                                                                                        return true;
                                                                                                        
                                                                                                      2. Алексей
                                                                                                        27 августа 2017, 07:48
                                                                                                        Здравствуйте, в login modx не осуществляется регистрация, вернее приходит письмо, я переходу по ссылке и она не переадресовывает на страницу которая указана в &redirectTo=`25`- в адресной строке указано sitename/reg-confirm?lp=Ynh3cWNycGg&lu=NjY2NjY2 и дальше ничего не происходит
                                                                                                        И как осуществить может такую форму регистрации как у Вас на сайте и есть ли возможность это сделать без перехода на другую страницу?
                                                                                                        1. Александр Мальцев
                                                                                                          27 августа 2017, 16:11
                                                                                                          Здравствуйте! Для начала посмотрите есть ли ошибки в журнале.
                                                                                                        2. Илья
                                                                                                          14 августа 2017, 16:54
                                                                                                          Здравствуйте,

                                                                                                          Подскажите пожалуйста.

                                                                                                          Задача следующая -при регистрации в определённую таблицу вносятся имя и фамилия пользователя.
                                                                                                          после авторизации попадает на страницу с формой обновляющей данные в этой таблице.
                                                                                                          При заходе на эту страницу в форму должен подставляться индивидуальный идентификатор пользователя (будет сравниваться с id строки при обновлении таблицы).

                                                                                                          Суть задачи — пользователь ввёл данные в форму, в таблице появилась запись, потом (на отдельной форме) эту запись сравнили с определённым числом и если совпало — обновили ячейку таблицы. Пользователей будет много, поэтому спрашиваю совета от чего лучше оттолкнуться.
                                                                                                          1. Александр Мальцев
                                                                                                            15 августа 2017, 14:51
                                                                                                            Здравствуйте! Осуществляйте связь вашей таблицы с таблицей modx_user на основе id.
                                                                                                            1. Илья
                                                                                                              15 августа 2017, 15:11
                                                                                                              Здравствуйте, спасибо за ответ.
                                                                                                              Могли бы подсказать более подробно?
                                                                                                              1. Александр Мальцев
                                                                                                                15 августа 2017, 15:28
                                                                                                                Насколько понял, вам необходима дополнительная таблица, в которую вы хотите сохранить различные данные, связанные с пользователем, а также впоследствии их с чем-то сравнивать и обновлять на основании них какие-то другие данные.
                                                                                                                Как начать это делать, можно посмотреть в этой статье.
                                                                                                          2. taras
                                                                                                            07 июня 2017, 14:07
                                                                                                            А как при помощи модуля Login попаcть в админку /manager?
                                                                                                            1. Александр Мальцев
                                                                                                              07 июня 2017, 15:16
                                                                                                              Назначить соответствующие права группы пользователей в которую он добавляется.
                                                                                                            2. Владимир
                                                                                                              24 марта 2017, 13:55
                                                                                                              Здравствуйте, как разрешить зарегестрированным пользователям добавлять статьи в избранное и нажимать нравиться/не нравится, пишет у вас недостаточно прав для этого действия? Настраивал права по вашему уроку.
                                                                                                              1. Александр Мальцев
                                                                                                                24 марта 2017, 15:15
                                                                                                                Для совершения эти действий пользователем (входящих в группу Users) необходимо установить права.
                                                                                                                Для этого нажимаем в главном меню админки на «Шестерёнку» -> выбираем пункт «Контроль доступа». После этого нажимаем правой кнопкой мыши по группе Users и выбираем пункт «Редактировать». Затем переходим на вкладку «Права доступа» и открываем вкладку «Доступ к контекстам». На данной вкладке нажимаем на кнопку «Добавить контекст». В открывшейся форме «Доступ групп пользователей к контексту» устанавливаем следующее:
                                                                                                                • контекст — web;
                                                                                                                • минимальная роль — Member 9999;
                                                                                                                • политика доступа — TicketUserPolicy.
                                                                                                                В итоге вы должны иметь 2 записи в этой вкладке.
                                                                                                                1. Владимир
                                                                                                                  24 марта 2017, 21:42
                                                                                                                  Спасибо, заработало. Можете еще сказать как в личном кабинете выводить комментарии которые пользователь написал и статьи который он добавил в избранное?
                                                                                                                  1. Александр Мальцев
                                                                                                                    25 марта 2017, 05:45
                                                                                                                    Для этих целей можете воспользоваться готовыми сниппетами.
                                                                                                                    1. Для комментариев использовать сниппет getComments:
                                                                                                                    [[!getComments?
                                                                                                                      &action=`tickets`
                                                                                                                      &user=`[[!+modx.user.id]]`
                                                                                                                    ]]
                                                                                                                    
                                                                                                                    2. Для избранного сниппет getStars:
                                                                                                                    [[!getStars?
                                                                                                                      &action=`Ticket`
                                                                                                                      &user=`[[!+modx.user.id]]`
                                                                                                                    ]]
                                                                                                                    
                                                                                                                    1. Владимир
                                                                                                                      25 марта 2017, 16:33
                                                                                                                      Спасибо, все работает! Ваш сайт очень помогает мне!
                                                                                                              2. rumano
                                                                                                                23 марта 2017, 19:16
                                                                                                                Здравствуйте!
                                                                                                                Большое спасибо за интересную статью.
                                                                                                                Хотелось узнать следующее. Допустим, у нас есть форма регистрации. В нее нужно добавить поле-чекбокс «С условиями согласен». Как это можно реализовать в MODX? С MODX начал работать недавно. Спасибо.
                                                                                                                1. rumano
                                                                                                                  23 марта 2017, 19:30
                                                                                                                  Код вызова сниппета Register:
                                                                                                                  [[!Register?
                                                                                                                    &submitVar=`login-register-btn`
                                                                                                                    &activation=`1`
                                                                                                                    &activationEmailSubject=` Подтверждение регистрации`
                                                                                                                    &activationResourceId=`9`
                                                                                                                    &successMsg=` Вам нужно подтвердить свою регистрацию.`
                                                                                                                    &usergroups=`Users`
                                                                                                                    &validate=`nospam:blank,
                                                                                                                      username:required:minLength=^8^,
                                                                                                                      password:required:minLength=^8^,
                                                                                                                      password_confirm:password_confirm=^password^,
                                                                                                                      fullname:required,
                                                                                                                      email:required:email,
                                                                                                                      agreed:contains=^agree^:required`
                                                                                                                    &usernameField=`email`
                                                                                                                  ]]
                                                                                                                  ...
                                                                                                                  ...
                                                                                                                  <div class="checkbox">
                                                                                                                    <label>
                                                                                                                      <input name="agreed:contains=^agreed^:required" type="checkbox" value="agree"[[%register.agreed:equalto=`agreed`:then=` checked="checked"`]] data-parsley-required="true"> I agree to the <a href="#" class="text-info">Terms of Service</a>
                                                                                                                    </label>
                                                                                                                    [[+error.agreed:notempty=`<ul class="parsley-errors-list filled"><li class="parsley-required">[[+error.agreed]]</li></ul>`]]
                                                                                                                  </div>
                                                                                                                  
                                                                                                                  Спасибо.
                                                                                                                  1. Александр Мальцев
                                                                                                                    24 марта 2017, 14:52
                                                                                                                    Здравствуйте! Спасибо!
                                                                                                                    1. В HTML форму регистрации добавить чекбокс (при использовании префикса reg.):
                                                                                                                    <input type="checkbox" name="agreed" value="agreed" [[!+reg.agreed:is=`agreed`:then=`checked`:else=``]]> I agree 
                                                                                                                    <span>[[!+reg.error.agreed]]</span>
                                                                                                                    
                                                                                                                    2. Создать сниппет (кастомный валидатор), например, имеющий имя checkAgreed:
                                                                                                                    <?php
                                                                                                                    $success = $value == 'agreed';
                                                                                                                    if (!$success) {
                                                                                                                      $validator->addError($key,'Вы не приняли условия пользовательского соглашения!');
                                                                                                                    }
                                                                                                                    return $success;
                                                                                                                    
                                                                                                                    3. В сниппете Register (т.к. в формы мы использовали префикс reg.) добавить:
                                                                                                                    [[!Register?
                                                                                                                      ...
                                                                                                                      &customValidators=`checkAgreed`
                                                                                                                      &validate=`...,
                                                                                                                        agreed:checkAgreed`
                                                                                                                      &placeholderPrefix=`reg.`
                                                                                                                    ]]
                                                                                                                    
                                                                                                                    1. rumano
                                                                                                                      24 марта 2017, 16:20
                                                                                                                      Добрый день. Скажите, пожалуйста, еще: как можно хранить эту переменную так, чтобы по этому полю можно было производить сортировку и фильтрацию. Спасибо.
                                                                                                                      1. Александр Мальцев
                                                                                                                        25 марта 2017, 05:37
                                                                                                                        Она и так автоматически сохраняется в дополнительных полях пользователя. В таблице user_attributes (профиле пользователя) в поле extended.
                                                                                                                        Для выборки данных (с возможностью сортировки и фильтрации) скорее всего придётся писать свой сниппет, т.к. в этом поле данные хранятся в формате JSON.

                                                                                                                        Если пригодится, то для того чтобы эти данные не сохранять в базу необходимо их указать в параметре excludeExtended:
                                                                                                                        [[!Register? &excludeExtended=`agreed`]]
                                                                                                                        
                                                                                                                2. Alexander
                                                                                                                  01 марта 2017, 18:39
                                                                                                                  Добрый день, а как сделать так чтобы при регистрации еще отправлялось письмо администратору?
                                                                                                                  Необходима ручная активация пользователя на сайте
                                                                                                                  1. Александр Мальцев
                                                                                                                    02 марта 2017, 17:37
                                                                                                                    Добрый вечер. Для этого необходимо сниппету Register добавить хук (параметр), код которого и будет отправлять письмо администратору:
                                                                                                                    [[!Register?
                                                                                                                      ...
                                                                                                                      &postHooks=`mailToAdministrator`
                                                                                                                    ]]
                                                                                                                    
                                                                                                                    Ну, и сам сниппет mailToAdministrator:
                                                                                                                    <?php
                                                                                                                    $message = 'Здравствуйте, администратор. Зарегистрировался новый пользователь. Имя: '.$hook->getValue('fullname').'Email:'.$hook->getValue('email');
                                                                                                                    $modx->getService('mail', 'mail.modPHPMailer');
                                                                                                                    $modx->mail->set(modMail::MAIL_BODY,$message);
                                                                                                                    $modx->mail->set(modMail::MAIL_FROM,'no-reply@mysite.ru');
                                                                                                                    $modx->mail->set(modMail::MAIL_FROM_NAME,'Имя сайта');
                                                                                                                    $modx->mail->set(modMail::MAIL_SENDER,'no-reply@mysite.ru');
                                                                                                                    $modx->mail->set(modMail::MAIL_SUBJECT,'Регистрация нового пользователя');
                                                                                                                    $modx->mail->address('to','admin@mysite.ru');
                                                                                                                    $modx->mail->setHTML(true);
                                                                                                                    if (!$modx->mail->send()) {
                                                                                                                        $modx->log(modX::LOG_LEVEL_ERROR,'Произошла ошибка при отправке почты: '.$err);
                                                                                                                    }
                                                                                                                    $modx->mail->reset();
                                                                                                                    return true;
                                                                                                                    
                                                                                                                  2. Alexandro
                                                                                                                    20 января 2017, 23:26
                                                                                                                    Извиняюсь, работает! Почистил кэши и заработало, спасибо!
                                                                                                                    1. Дмитрий
                                                                                                                      23 декабря 2016, 07:15
                                                                                                                      Здравствуйте, подскажите, как решить следующую задачу. Пользователь зарегистрировался или вошел на сайт. В footer есть место, где пользователю предлагается авторизоваться или пройти регистрацию.
                                                                                                                      Использую условие:
                                                                                                                      [[!+modx.user.id:isloggedin=`<li>Добрый день, [[+modx.user.username]].</li>`:else=`<li>Добрый день, гость. Вы можете <a href="[[~56]]">авторизоваться</a> или пройти <a href="[[~58]]">регистрацию.</a></li>`]]
                                                                                                                      
                                                                                                                      Но почему-то ничего не происходит.
                                                                                                                      itchief.ru/assets/uploadify/9/1/9/919d49859d83067b05bcf71f95c1c772.jpg
                                                                                                                      1. Александр Мальцев
                                                                                                                        23 декабря 2016, 13:12
                                                                                                                        Здравствуйте, данное значение необходимо сравнивать с 1:
                                                                                                                        [[!+modx.user.id:isloggedin:is=`1`:then=`Да`:else=`Нет`]]
                                                                                                                        
                                                                                                                        1. Alexandro
                                                                                                                          19 января 2017, 17:29
                                                                                                                          Спасибо за подсказку!
                                                                                                                          Написал у себя:
                                                                                                                          [[!+modx.user.id:isloggedin:is=`1`:then=`Добрый день, [[+modx.user.username]]!`:else=`Здравствуйте, гость!`]]
                                                                                                                          Теперь у зарегистрированного юзера вместо «Здравствуйте, гость!» появляется «Добрый день, (адрес мейла)!». Если же вместо +modx.user.username написать +modx.user.fullname или просто +fullname, то… имя не появляется, просто «Добрый день, !»
                                                                                                                          (В комментариях к публикациям, где стоит
                                                                                                                          <span class="ticket-comment-author">[[+fullname]]</span>

                                                                                                                          полное имя появляется.)
                                                                                                                          Как сделать, чтобы в этом поле было полное имя, указанное при регистрации?
                                                                                                                          1. Александр Мальцев
                                                                                                                            20 января 2017, 13:28
                                                                                                                            Будет так:
                                                                                                                            [[!+modx.user.id:isloggedin:is=`1`:then=`Добрый день, [[+modx.user.id:userinfo=`fullname`]]!`:else=`Здравствуйте, гость!`]]
                                                                                                                            
                                                                                                                            1. Alexandro
                                                                                                                              20 января 2017, 22:35
                                                                                                                              Все равно то же самое :(
                                                                                                                      2. Александр
                                                                                                                        22 декабря 2016, 12:52
                                                                                                                        Здравствуйте, помогите с выбором пола в форме регистрации. Никак не получается зарегистрировать пол. Вот код радиокнопки:
                                                                                                                        <td valign=top nowrap=nowrap>
                                                                                                                        <b>Пол:<span style='color:#e00;'><b> *</b></span>
                                                                                                                        </td>
                                                                                                                        <td>
                                                                                                                        <input name=pol type=radio value="[[!+reg.gender]]" id=1>
                                                                                                                        <label for=pol1>Мужской</label>   
                                                                                                                        <input name=pol type=radio value="[[!+reg.gender]]" id=2>
                                                                                                                        <label for=pol2>Женский</label>
                                                                                                                        								   </td>
                                                                                                                        1. Александр Мальцев
                                                                                                                          23 декабря 2016, 14:33
                                                                                                                          В MODX поле пол имеет имя gender. Для задания этому полю значений необходимо использовать числовые значения: 0 (не установлено), 1 (мужчина), 2 (женщина), 3 (скрыт).
                                                                                                                          <input name="gender" type="radio" value="1" [[!+reg.gender:is=`1`:then=`checked`:else=``]]>
                                                                                                                          <label for="gender">Мужской</label>   
                                                                                                                          <input name="gender" type="radio" value="2" [[!+reg.gender:is=`2`:then=`checked`:else=``]]>
                                                                                                                          <label for="gender">Женский</label>
                                                                                                                          
                                                                                                                        2. Vlad
                                                                                                                          09 ноября 2016, 14:32
                                                                                                                          Доброго времени суток, Александр!

                                                                                                                          Зарегистрированный пользователь при первом входе блокируется сайтом (окно уведомления предлагает обратиться к администратору). В разделе Пользователи, админпанели галочка блокировка не выставлена. Куда смотреть, или в примере юзеры становятся доступны после прямой активации админом?
                                                                                                                          1. Александр Мальцев
                                                                                                                            12 ноября 2016, 08:00
                                                                                                                            Пользователь для того чтобы войти под своими учётными данными должен их после регистрации подтвердить посредством ссылки из email. Блокировка пользователя по умолчанию производится только после 5 неудачных попыток входа. Определяется это значение параметром failed_login_attempts (в системных настройках). Длительность блокировки составляет по умолчанию 60 минут (параметр в системных настройках blocked_minutes).
                                                                                                                          2. Александр
                                                                                                                            09 октября 2016, 11:43
                                                                                                                            Кэширование не помогло. Скопировал чанк рабочей регистрации, вызываю два чанка на разных страницах! Работает только первый(хотя они идентичны)! В чем может быть дело?
                                                                                                                            1. Александр Мальцев
                                                                                                                              10 октября 2016, 14:09
                                                                                                                              Проверяйте… Всё должно работать. Может вы просто не отключили визуальный редактор или что ещё. Также попробуйте очистить кэш сайта.
                                                                                                                            2. Александр
                                                                                                                              04 октября 2016, 14:30
                                                                                                                              Где то в системных настройках видел разрешение о использовании одного email для нескольких пользователей, у меня стояло «Да». Я вставил нет, оно что не работает? И еще вопрос: на сайте две группы пользователей, две регистрации, 1-работает, 2- нет. Регистрация №2 копия №1 с доп.полями. Вызываю так: [[$lgnRegisterSpecFormTpl]]. Подскажите куда смотреть.
                                                                                                                              1. Александр Мальцев
                                                                                                                                05 октября 2016, 11:34
                                                                                                                                Это просто для примера. Используя хуки можно, например, настроить какие-то дополнительные проверки того же логина или любых других полей в зависимости от задач.
                                                                                                                                А так да… В MODX Revolution есть такой параметр (allow_multiple_emails). Если ему установить значение нет, то разные пользователи не смогут иметь один и тот же адрес email. Она находится в разделе «Авторизация и безопасность».
                                                                                                                                Попробуйте вызвать чанк не кэшированным. Или сделать одну форму но с переключателями. Если выбран один, то одни поля. И если другой переключатель, то другие. Ещё один вариант — это в зависимости от get параметра страницы отображать одну или другую форму.
                                                                                                                              2. Александр
                                                                                                                                03 октября 2016, 20:57
                                                                                                                                Т.е. у него в функциях заложено проверять только логин? Попробую Ваш хук переделать.
                                                                                                                                1. Александр Мальцев
                                                                                                                                  04 октября 2016, 13:52
                                                                                                                                  Да, он проверяет только поле username. В статье мы установили в качестве значения данного поля email и тем самым защитили процесс регистрации пользователей от использования одинаковых email.
                                                                                                                                  В комментарии приведён другой способ, в котором в качестве username, например, может использоваться логин. А email пользователя проверятся с помощью хука. Т.е. он ищет, если у других пользователь точно такой же email. И если есть, то данный хук прерывает процесс выполнения регистрации и выводит сообщение о том, что пользователь с таким email уже есть.
                                                                                                                                2. Александр
                                                                                                                                  30 сентября 2016, 12:57
                                                                                                                                  Возникли новые вопросы! При регистрации проверка email по базе происходит, а логина нет. Как это можно исправить?
                                                                                                                                  И выбором поля не могу разобраться. Подскажите пожалуйста!
                                                                                                                                  1. Александр Мальцев
                                                                                                                                    03 октября 2016, 14:37
                                                                                                                                    Можно сделать так.
                                                                                                                                    1. Добавить в форму поле для ввода логина:
                                                                                                                                    <input type="text" name="username" class="form-control" id="username" placeholder="Логин" value="[[!+reg.username]]">[[!+reg.error.username]]
                                                                                                                                    
                                                                                                                                    2. В вызове сниппета Register изменить значения параметра, отвечающего за имя пользователя (т.е. указать username):
                                                                                                                                    &usernameField=`username`
                                                                                                                                    
                                                                                                                                    3. Для проверки ввода в форме регистрации существующего email написать хук (например, checkUserEmail):
                                                                                                                                    $email = $hook->getValue('email');
                                                                                                                                    $where = array(
                                                                                                                                      'email' => $email
                                                                                                                                    );
                                                                                                                                    $emails = $modx->getCollection('modUserProfile',$where);
                                                                                                                                    if (count($emails) >= 1) {
                                                                                                                                      $errorMsg = 'Пользователь с таким email существует';
                                                                                                                                      $hook->addError('email',$errorMsg);
                                                                                                                                      return false;
                                                                                                                                    } else {
                                                                                                                                      return true;
                                                                                                                                    }
                                                                                                                                    
                                                                                                                                    4. Указать параметр хук в качестве параметра сниппета Register:
                                                                                                                                    &preHooks=`checkUserEmail`
                                                                                                                                    
                                                                                                                                  2. Александр
                                                                                                                                    28 сентября 2016, 09:13
                                                                                                                                    Нашел, дело было в HTML коде перед формой и коде кнопки отправления. Теперь письма приходят целых два. И ошибки странные для меня. Покопаюсь, если сам не справлюсь напишу. Спасибо за ваши ответы.
                                                                                                                                    1. Александр
                                                                                                                                      28 сентября 2016, 08:27
                                                                                                                                      Все по прежнему, и ошибка та же.
                                                                                                                                      1. Александр
                                                                                                                                        26 сентября 2016, 21:31
                                                                                                                                        Выручайте! Регистрация не работает! Письмо не приходит!
                                                                                                                                        [[!Register?
                                                                                                                                        
                                                                                                                                            &submitVar=`submitbtn`
                                                                                                                                        	&generatePassword=`1`
                                                                                                                                        	&validatePassword=`0`
                                                                                                                                            &activation=`1`
                                                                                                                                            &activationEmailSubject=`Подтверждение регистрации`
                                                                                                                                            &activationResourceId=`23`
                                                                                                                                            &successMsg=`<p>Спасибо за регистрацию. На вашу электронную почту [[!+reg.email]] отправлено письмо, содержащее ссылку, необходимую для активацию аккаунта. Перейдите по этой ссылке, чтобы завершить процедуру регистрации.</p>`
                                                                                                                                            &usergroups=`Users`
                                                                                                                                        	&placeholderPrefix=`reg.`
                                                                                                                                        	&preHooks=`recaptchav2`
                                                                                                                                            &usernameField=`username`
                                                                                                                                            &passwordField=`passwd`    
                                                                                                                                            &validate=`nospam:blank,
                                                                                                                                              username:required,
                                                                                                                                              email:required:email`
                                                                                                                                            &placeholderPrefix=`reg.`
                                                                                                                                        ]]
                                                                                                                                        
                                                                                                                                        
                                                                                                                                        
                                                                                                                                        
                                                                                                                                        
                                                                                                                                                              <form action="[[~[[*id]]]]" method="post" class="form-horizontal">
                                                                                                                                                              <input type="hidden" name="nospam" id="nospam" value="[[!+reg.nospam]]">
                                                                                                                                        
                                                                                                                                        
                                                                                                                                                               <div class=box-grey style="padding: 15px;">
                                                                                                                                                                     <table class=reg_table>
                                                                                                                                                                      <tr valign=top>
                                                                                                                                        
                                                                                                                                        
                                                                                                                                                                       <td nowrap=nowrap width=100><b>Имя (ник):<span style='color:#e00;'><b> *</b></span>
                                                                                                                                                                           </b>
                                                                                                                                        
                                                                                                                                        					           </td>
                                                                                                                                        
                                                                                                                                                                       <td>
                                                                                                                                        							      <input type="text" name="username" id="username" size=20 maxlength=100 style="width: 300px;" placeholder="" value="[[!+reg.username]]">
                                                                                                                                                              <span class="help-block text-error">
                                                                                                                                                            [[!+reg.error.username]]
                                                                                                                                                              </span>  
                                                                                                                                        					           </td>            
                                                                                                                                                                      </tr>
                                                                                                                                        
                                                                                                                                                                      <tr valign=top>
                                                                                                                                        
                                                                                                                                                                          <td align="left" width=100><b>E-mail:<span style='color:#e00;'><b> *</b></span>
                                                                                                                                                                          </td>
                                                                                                                                        
                                                                                                                                                                          <td>
                                                                                                                                                                              <input type="email" name="email" id="email" size=40 maxlength=40 style="width: 300px;" placeholder="" value="[[!+reg.email]]">
                                                                                                                                                              <span class="help-blo'ck text-error">
                                                                                                                                                            [[!+reg.error.email]]
                                                                                                                                                              </span>        
                                                                                                                                                                          </td>
                                                                                                                                        
                                                                                                                                        					           <tr>
                                                                                                                                        
                                                                                                                                                                       <tr valign=top>
                                                                                                                                                                           <td valign=top nowrap=nowrap><b>Пароль:</b></td>
                                                                                                                                        				                   <td style='color: #666; font-size: 14px;'>Будет сформирован автоматически и отправлен в письме
                                                                                                                                        								   <input type="hidden" name="passwd" id="passwd" value="[[!+reg.passwd]]">
                                                                                                                                        								   </td>
                                                                                                                                        						       </tr>
                                                                                                                                        
                                                                                                                                                              <input type="hidden" name="passwd" id="passwd" value="[[!+reg.passwd]]">
                                                                                                                                        
                                                                                                                                        
                                                                                                                                                                       <tr valign=top>
                                                                                                                                        
                                                                                                                                                                           <td valign=top nowrap=nowrap><b>Пол:<span style='color:#e00;'><b> *</b></span>
                                                                                                                                        								   </td>
                                                                                                                                        				                   <td>
                                                                                                                                        									   <input name=pol type=radio value=1 id=pol1>
                                                                                                                                        									   <label for=pol1>Мужской</label>   
                                                                                                                                        									   <input name=pol type=radio value=2 id=pol2>
                                                                                                                                        									   <label for=pol2>Женский</label>
                                                                                                                                        								   </td>
                                                                                                                                        
                                                                                                                                        								<tr valign=top>
                                                                                                                                        								    <td align="left" width=100><b>Город:
                                                                                                                                        									</td>
                                                                                                                                                                            <td>
                                                                                                                                        									<input type="city" name="city" id="city" size=40 maxlength=40 style="width: 300px;" placeholder="" value="[[!+reg.city]]">
                                                                                                                                        
                                                                                                                                        
                                                                                                                                                                            <div style="margin: 5px 0 0px 0; color: #666; font-size: 14px;">
                                                                                                                                        									<input name=city_shw type=checkbox value=1 checked id=city_shw style="margin: 0 0 2px 0; vertical-align: bottom;">
                                                                                                                                        									<label for=city_shw> Не показывать мой город другим пользователям</label>
                                                                                                                                        									</div>
                                                                                                                                        									</td>
                                                                                                                                                                        </tr>
                                                                                                                                                             </table>
                                                                                                                                        					   <div style="border-top: 1px solid #ccc; height: 1px; margin: 15px 0px;"></div>
                                                                                                                                        					   <div style="margin: 0 0 10px 0; color: #2a649e;">Если вы пришли на сайт по рекомендации уже зарегистрированного специалиста, пожалуйста, укажите его здесь.</div>
                                                                                                                                        					   <input id=spec_id_register name="spec_id_register" type=hidden value="0">
                                                                                                                                        
                                                                                                                                        					     <table class=reg_table>
                                                                                                                                        						  <tr>
                                                                                                                                        						   <td width=100><b>Рекомендовал:   </td>
                                                                                                                                        						    <td>
                                                                                                                                        						        <input id=spec_text_register name=spec_text value="" type=text autocomplete=off placeholder="ФИО специалиста">
                                                                                                                                                                         <div style="height: 1px; position: relative;">
                                                                                                                                        								  <div id=spec_result_register style="display: none;">
                                                                                                                                        								  </div>
                                                                                                                                        								 </div>
                                                                                                                                                                   </td>
                                                                                                                                        						  </tr>
                                                                                                                                        						 </table>
                                                                                                                                                       <div style="border-top: 1px solid #ccc; height: 1px; margin: 15px 0px;"></div>
                                                                                                                                        
                                                                                                                                        			             <table class=reg_table>
                                                                                                                                        						  <tr valign=top>
                                                                                                                                        						  <td width=100>    <div class="form-item">
                                                                                                                                                                                         [[!recaptchav2_render]]
                                                                                                                                                                                      [[!+reg.error.recaptchav2_error:notempty=`Пожалуйста, отметьте флажок на reCaptcha`]]
                                                                                                                                                                                    </div>
                                                                                                                                                                   </td>
                                                                                                                                        						   </tr>
                                                                                                                                        						  </table>
                                                                                                                                        
                                                                                                                                                                    <div style="border-top: 1px solid #ccc; height: 1px; margin: 15px 0px;"></div>
                                                                                                                                        
                                                                                                                                        						  <table class=reg_table>
                                                                                                                                        						        <tr valign=top>
                                                                                                                                        								 <td colspan=2 style='font-size: 14px; padding: 0;'><b>Подписки:</b></td>
                                                                                                                                        							    </tr>
                                                                                                                                                                        <tr valign=top>
                                                                                                                                        								 <td width=5 style="padding-right: 8px;"><input type=checkbox name=uns1 value=1 id=uns1 checked></td>
                                                                                                                                        
                                                                                                                                        							    <td><label for=uns1>Получать уведомления о новых личных сообщениях и ответах на форуме</label></td>
                                                                                                                                                  `                     </tr>
                                                                                                                                        
                                                                                                                                        		                    <tr valign=top>   
                                                                                                                                        
                                                                                                                                                                        <td style='padding-top: 0;'><input type=checkbox name=uns2 value=1 id=uns2 checked></td>
                                                                                                                                        								<td style='padding-top: 0;'><label for=uns2>Получать список лучших статей психологов <span style='color: #666;'>(1 раз в месяц)</span></label></td>
                                                                                                                                        							</tr>
                                                                                                                                                                    <tr valign=top>
                                                                                                                                        							    <td style='padding-top: 0;'><input type=checkbox name=uns3 value=1 id=uns3 checked></td>
                                                                                                                                        								<td style='padding-top: 0;'><label for=uns3>Получать анонсы ближайших тренингов в моем городе <span style='color: #666;'>(2 раза в месяц)</span></label></td>
                                                                                                                                        						    </tr>
                                                                                                                                        						  </table>
                                                                                                                                        
                                                                                                                                        						  <div style="border-top: 1px solid #ccc; height: 1px; margin: 15px 0px;"></div>
                                                                                                                                        
                                                                                                                                        						  <table border=0 cellspacing=0 cellpadding=0>
                                                                                                                                        						      <tr valign=top>
                                                                                                                                        
                                                                                                                                        							      <td colspan=2 style='font-size: 14px; padding-bottom: 8px;'><b>Пользовательское соглашение:</b></td>
                                                                                                                                        							  </tr>
                                                                                                                                        
                                                                                                                                        							  <tr valign=top>
                                                                                                                                        							      <td width=5 style='padding-right: 8px;'><input id=sogl name=sogl type=checkbox value=1 OnClick="s()"></td> 
                                                                                                                                        								  <td style='font-size: 16px; color: #333;'><label for=sogl>Я ознакомлен(а) и принимаю условия <a href='/help/rule/' target='_blank'>пользовательского соглашения</a> и <a href='/help/confidential/' target='_blank'>политики конфиденциальности</a>.</label></td>
                                                                                                                                        							  </tr>
                                                                                                                                                                  </table>
                                                                                                                                        
                                                                                                                                        						  <input class=submit_yellow id=sub name=submitbtn type=submit value=" Зарегистрироваться! " style="margin: 20px 0 0 0; color: #000; opacity: 0.5;" disabled></div>
                                                                                                                                        						  </form>
                                                                                                                                        						  </div>
                                                                                                                                        </td>
                                                                                                                                        
                                                                                                                                        В логе это

                                                                                                                                        (ERROR @ /home/c/cs72731/modx_7/core/model/modx/modcachemanager.class.php: 317) Could not cache resource 1
                                                                                                                                        1. Александр Мальцев
                                                                                                                                          27 сентября 2016, 01:33
                                                                                                                                          Скорее всего у Вас ошибка связано с reCaptcha.
                                                                                                                                          Удалите из вызова сниппета Register строчку
                                                                                                                                          &preHooks=`recaptchav2`
                                                                                                                                          
                                                                                                                                          А из HTML формы:
                                                                                                                                          [[!recaptchav2_render]]
                                                                                                                                          [[!+reg.error.recaptchav2_error:notempty=`Пожалуйста, отметьте флажок на reCaptcha`]]
                                                                                                                                          
                                                                                                                                          Если форма будет отправляться, значит Вы что-то неправильно настроили в reCaptcha.
                                                                                                                                        2. Александр
                                                                                                                                          22 сентября 2016, 19:49
                                                                                                                                          Нашел однако.
                                                                                                                                          1. Александр
                                                                                                                                            22 сентября 2016, 12:39
                                                                                                                                            Дело в том что шаблон регистрации в HTML со стилями у меня есть, проблема в том что не получается все это объединить.
                                                                                                                                            1. Александр
                                                                                                                                              21 сентября 2016, 19:17
                                                                                                                                              Не могу разобраться как настроить внешний вид форм с помощью CSS или по другому, подскажите пожалуйста.
                                                                                                                                              1. Александр Мальцев
                                                                                                                                                22 сентября 2016, 09:21
                                                                                                                                                В данной статье использован front-end фреймворк Twitter Bootstrap. Просто скачайте его и подключите к странице. После этого у вас сразу же будут такое же оформление как на изображениях в статье. Подробно этот процесс описан в статье Подключение Bootstrap к странице.
                                                                                                                                              2. Максим
                                                                                                                                                14 сентября 2016, 08:16
                                                                                                                                                Как сделать автогенерацию пароля?

                                                                                                                                                [[!Register?
                                                                                                                                                &submitVar=`submitbtn`
                                                                                                                                                &activation=`1`
                                                                                                                                                &activationEmailSubject=`Подтверждение регистрации`
                                                                                                                                                &successMsg=`<p>Спасибо за регистрацию. На вашу электронную почту [[!+reg.email]] отправлено письмо, содержащее ссылку, необходимую для активацию аккаунта. Перейдите по этой ссылке, чтобы завершить процедуру регистрации.</p><p>p.s. Если письмо не пришло - проверьте папку спам.</p>`
                                                                                                                                                &usergroups=`Users`
                                                                                                                                                &usernameField=`phone`
                                                                                                                                                &generatePassword=`1`
                                                                                                                                                &validatePassword=`0`
                                                                                                                                                &placeholderPrefix=`reg.`
                                                                                                                                                &activationResourceId=`34`
                                                                                                                                                &validate=`nospam:blank`
                                                                                                                                                ]]
                                                                                                                                                
                                                                                                                                                
                                                                                                                                                [[!+error.message:eq=``:then=`
                                                                                                                                                <form action="[[~[[*id]]]]" method="post">
                                                                                                                                                  <input type="hidden" name="nospam" id="nospam" value="[[!+reg.nospam]]">
                                                                                                                                                  <div class="form-group">
                                                                                                                                                	<div class="col-sm-12">
                                                                                                                                                	  <input type="text" name="fullname" class="form-control" id="fullname" placeholder="Как Вас зовут" value="[[!+reg.fullname]]">
                                                                                                                                                	  <span class="help-block text-error">
                                                                                                                                                		[[!+reg.error.fullname]]
                                                                                                                                                	  </span>
                                                                                                                                                	</div>
                                                                                                                                                  </div>
                                                                                                                                                  <div class="form-group">
                                                                                                                                                	<div class="col-sm-12">
                                                                                                                                                	  <input type="email" name="email" class="form-control" id="email" placeholder="Введите Email" value="[[!+reg.email]]">
                                                                                                                                                	  <span class="help-block text-error">
                                                                                                                                                		[[!+reg.error.email]]
                                                                                                                                                	  </span>
                                                                                                                                                	</div>
                                                                                                                                                  </div>
                                                                                                                                                  <div class="form-group">
                                                                                                                                                	<div class="col-sm-12">
                                                                                                                                                	  <textarea type="text" name="phone" class="form-control" id="phone" placeholder="Телефон" value="[[!+reg.phone]]">[[!+reg.phone]]</textarea>
                                                                                                                                                	  <span class="help-block text-error">
                                                                                                                                                		[[!+reg.error.phone]]
                                                                                                                                                	  </span>
                                                                                                                                                	</div>
                                                                                                                                                  </div>
                                                                                                                                                  <div class="col-md-12 move-right">
                                                                                                                                                	<input type="submit" value="Далее" name="submitbtn" id="submitbtn" class="btn btn-primary">
                                                                                                                                                  </div>
                                                                                                                                                </form>
                                                                                                                                                `:else=`<div class="alert alert-success">[[!+error.message]]</div>`]]
                                                                                                                                                Это способ не работает, страница перезагружается и всё.
                                                                                                                                                1. Александр Мальцев
                                                                                                                                                  16 сентября 2016, 11:58
                                                                                                                                                  Не знаю, вставил Ваш код на страницу… всё работает. Может проблема не в этом коде?
                                                                                                                                                2. Сергей Карпук
                                                                                                                                                  11 сентября 2016, 16:49
                                                                                                                                                  Большое спасибо за статьи. Наконец-то сумел разобраться и настроить регистрацию пользователей. Оказывается всё доступно!

                                                                                                                                                  В тексте, правда есть небольшая неточность: сниппет ConfirmRegister предлагается разместить в ресурсе «Регистрация» вместо «Подтверждения регистрации» (скриншот).
                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                    12 сентября 2016, 09:32
                                                                                                                                                    Спасибо, поправил.
                                                                                                                                                  2. Максим Корепанов
                                                                                                                                                    27 августа 2016, 20:47
                                                                                                                                                    Какая-то… опа. Присылает 2 письма со ссылками, по любому переходишь к активации и попадаешь на страницу с ошибкой.

                                                                                                                                                    В логах также «Could not get table name for class: modAccess»,
                                                                                                                                                    1. Андрей
                                                                                                                                                      09 февраля 2018, 05:46
                                                                                                                                                      Здравствуйте Максим.
                                                                                                                                                      Решили у себя проблему? Если да, то как?
                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                        28 августа 2016, 06:08
                                                                                                                                                        1. Попробуйте переустановить компонент.
                                                                                                                                                        2. Ещё раз проверьте Ваши действия, т.к. должно приходить одно письмо.
                                                                                                                                                      2. Слава
                                                                                                                                                        05 августа 2016, 12:40
                                                                                                                                                        А может ты подскажешь как вставить в регистрацию дату рождения, понят не могу как туда засунуть через датаpicker, в виде хука делают я так понимаю?
                                                                                                                                                        1. Александр Мальцев
                                                                                                                                                          06 августа 2016, 13:24
                                                                                                                                                          1. Добавить в форму блок с датой рождения:
                                                                                                                                                          <div class="form-group">
                                                                                                                                                            <label for="dob" class="col-sm-4 control-label">Дата рождения:</label>
                                                                                                                                                            <div class="col-sm-8">
                                                                                                                                                              <input type="text" name="dob" class="form-control" id="dob" placeholder="" value="[[!+reg.dob:date=`%Y-%m-%d`]]">
                                                                                                                                                              <span class="help-block text-error">
                                                                                                                                                                [[!+reg.error.dob]]
                                                                                                                                                              </span>        
                                                                                                                                                            </div>     
                                                                                                                                                          </div>
                                                                                                                                                          
                                                                                                                                                          2. При необходимости подключить datepicker.
                                                                                                                                                          3. Добавить в вызов сниппета Register параметр preHooks:
                                                                                                                                                          &preHooks=`formatDob`
                                                                                                                                                          
                                                                                                                                                          3. Создать сниппет formatDob:
                                                                                                                                                          <?php
                                                                                                                                                          $dob = $hook->getValue('dob');
                                                                                                                                                          $hook->setValue('dob',strtotime($dob));
                                                                                                                                                          return true;
                                                                                                                                                          
                                                                                                                                                          1. Слава
                                                                                                                                                            08 августа 2016, 04:16
                                                                                                                                                            Спасибо работает, я думал через postHook, типа когда создался пользователь и потом находим по id и дописываем дату рождение. Но так намного лучше!!!.. Единственное решение в инете, как добавить день рождение в login — register больше негде не нашёл.
                                                                                                                                                        2. akradeus
                                                                                                                                                          23 июня 2016, 07:47
                                                                                                                                                          Мммм заметил интересную фитчу на этом сайте… Загрузить картинку в комментариях)))
                                                                                                                                                          Интересно как это сделано? Как то искал это на форумах так и не нашёл а тут раз и ЕСТЬ))
                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                            23 июня 2016, 14:29
                                                                                                                                                            Для этого дела существует множество различных компонентов: FileAttach, UserFiles, Uploadify, FileUpload, AjaxUpload и др. Выбирайте на свой вкус.
                                                                                                                                                          2. Легион
                                                                                                                                                            22 июня 2016, 21:23
                                                                                                                                                            НЕ подскажите, как можно сделать, чтобы после авторизации, кнопка Авторизация/вход становилась Личный кабинет?
                                                                                                                                                            1. Александр Мальцев
                                                                                                                                                              23 июня 2016, 13:19
                                                                                                                                                              Это надо делать с помощью AJAX. Т.е. отправляешь данные формы авторизации на сервер и получаешь ответ. В зависимости от ответа убираешь форму (кнопку) авторизации и отображаешь личный кабинет. Либо если ответ пришёл ответ отрицательный, то отображаешь в форме ошибку.
                                                                                                                                                              1. Сергей
                                                                                                                                                                05 июля 2016, 13:55
                                                                                                                                                                Я сделал через [[!+modx.user.id:gt=`0`:then=`Личный кабинет`:else=`Войти или Зарегистрироваться`]]
                                                                                                                                                                Ни какого Аякса )))
                                                                                                                                                                1. Александр Мальцев
                                                                                                                                                                  06 июля 2016, 13:36
                                                                                                                                                                  Если ajax не нужен, то можно ещё воспользоваться специально предназначенного для этого дела фильтром:
                                                                                                                                                                  [[!+modx.user.id:isloggedin=`для авторизированного`:else=`для не авторизированного`]]
                                                                                                                                                                  
                                                                                                                                                            2. akradeus
                                                                                                                                                              17 июня 2016, 20:44
                                                                                                                                                              Подскажите пожайлуста. Делал регистрацию по вашему уроку… Всё сделал как написано…
                                                                                                                                                              НО письма не приходят ни о регистрации ни о восстановлении пароля, хотя настройки почты поставил и они работают сниппет ФОРМИТ отправляет письма…
                                                                                                                                                              Настроено через SMTP

                                                                                                                                                              В чём может быть проблема??? Почему не приходят эти письма???
                                                                                                                                                              1. Александр Мальцев
                                                                                                                                                                19 июня 2016, 09:43
                                                                                                                                                                Обычно, если что-то не работает то это отображается в журнале ошибок. Посмотрите какая там возникает ошибка.
                                                                                                                                                                1. akradeus
                                                                                                                                                                  23 июня 2016, 07:42
                                                                                                                                                                  [2016-06-23 10:40:36] (ERROR @ /connectors/index.php) Could not get table class for class: modAccess
                                                                                                                                                                  [2016-06-23 10:40:36] (ERROR @ /connectors/index.php) Could not get table name for class: modAccess
                                                                                                                                                                  [2016-06-23 10:40:36] (ERROR @ /connectors/index.php) Error 42000 executing statement: 
                                                                                                                                                                  Array
                                                                                                                                                                  (
                                                                                                                                                                      [0] => 42000
                                                                                                                                                                      [1] => 1064
                                                                                                                                                                      [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `modAccess` WHERE `modAccess`.`principal` = 4' at line 1
                                                                                                                                                                  )
                                                                                                                                                                  
                                                                                                                                                                  [2016-06-23 10:40:39] (ERROR @ /connectors/index.php) Could not get table class for class: modAccess
                                                                                                                                                                  [2016-06-23 10:40:39] (ERROR @ /connectors/index.php) Could not get table name for class: modAccess
                                                                                                                                                                  [2016-06-23 10:40:39] (ERROR @ /connectors/index.php) Error 42000 executing statement: 
                                                                                                                                                                  Array
                                                                                                                                                                  (
                                                                                                                                                                      [0] => 42000
                                                                                                                                                                      [1] => 1064
                                                                                                                                                                      [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS `modAccess` WHERE `modAccess`.`principal` = 5' at line 1
                                                                                                                                                                  )
                                                                                                                                                                  
                                                                                                                                                                  
                                                                                                                                                                  Это всё что есть в логах
                                                                                                                                                                  1. Дмитрий
                                                                                                                                                                    22 декабря 2016, 20:10
                                                                                                                                                                    Здравствуй! Подскажи как решил проблему? То же самое в логах
                                                                                                                                                                    1. Дмитрий
                                                                                                                                                                      23 декабря 2016, 06:38
                                                                                                                                                                      Вопрос решен.
                                                                                                                                                                      Заменил в системных настройках Адрес электронной почты на noreply@sitename.kz и письма стали приходить.
                                                                                                                                                                    2. Александр Мальцев
                                                                                                                                                                      23 июня 2016, 14:21
                                                                                                                                                                      Не знаю, в чём может быть загвоздка. Сниппет register использует для подготовки и отправки почты класс MODX mail (modMail), который в свою очередь полагается на php-класс PHPMailer.
                                                                                                                                                                2. Легион
                                                                                                                                                                  17 июня 2016, 14:10
                                                                                                                                                                  И снова здравствуйте. Столкнулся с такими ошибками. После перехода по ссылке для активации аккаунта, вылетает 503 ошибка, но аккаунт активируется. В чем может быть проблема?
                                                                                                                                                                  И главная проблема. На отдельной странице регистрация проходит отлично. Но во всплывающем окне на главной постоянная ошибка E-mail. Причем, не пишет что именно, а просто выделяет красным и не дает зарегистрироваться. Не подскажите, в чем может быть проблема?
                                                                                                                                                                  1. Александр Мальцев
                                                                                                                                                                    19 июня 2016, 09:57
                                                                                                                                                                    503 ошибка возникает когда сервер перестаёт принимать запросы. Т.е. отсылается слишком много запросов. Посмотрите какие ошибки есть в журнале.
                                                                                                                                                                    1. Легион
                                                                                                                                                                      21 июня 2016, 09:06
                                                                                                                                                                      Вопрос снят. Судя по всему проблема была в несовместимости JS. Поставил модальное окно на чистом CSS — все заработало.
                                                                                                                                                                      1. Легион
                                                                                                                                                                        20 июня 2016, 09:12
                                                                                                                                                                        Спасибо. Попробую разобраться. НЕ подскажете, в чем может заключаться ошибка вывода формы во всплывающем меню?
                                                                                                                                                                        <nav class="main-nav">
                                                                                                                                                                        			<ul>
                                                                                                                                                                        				<!-- ссылки на вызов форм -->
                                                                                                                                                                        				<li><a class="cd-signin" href="#">Вход</a></li>
                                                                                                                                                                        				<li><a class="cd-signup" href="#">Регистрация</a></li>
                                                                                                                                                                        			</ul>
                                                                                                                                                                        		</nav>
                                                                                                                                                                        <div class="cd-user-modal"> <!-- все формы на фоне затемнения-->
                                                                                                                                                                        		<div class="cd-user-modal-container"> <!-- основной контейнер -->
                                                                                                                                                                        			<ul class="cd-switcher">
                                                                                                                                                                        				<li><a href="#">Вход</a></li>
                                                                                                                                                                        				<li><a href="#">Регистрация</a></li>
                                                                                                                                                                        			</ul>
                                                                                                                                                                        [[!Login? 
                                                                                                                                                                          &tplType=`modChunk`
                                                                                                                                                                          &loginTpl=`myLoginChunk`
                                                                                                                                                                          &logoutTpl=`myLogoutChunk`
                                                                                                                                                                          &errTpl=`lgnErrTpl` 
                                                                                                                                                                          &redirectToPrior=`1`
                                                                                                                                                                        ]]
                                                                                                                                                                        		
                                                                                                                                                                        				<p class="cd-form-bottom-message"><a href="#0">Забыли свой пароль?</a></p>
                                                                                                                                                                        				<!-- <a href="#0" class="cd-close-form">Close</a> -->
                                                                                                                                                                        			</div> <!-- cd-login -->
                                                                                                                                                                        	[[!Register?
                                                                                                                                                                            &submitVar=`submitbtn`
                                                                                                                                                                            &activation=`1`
                                                                                                                                                                            &activationEmailSubject=`Подтверждение регистрации`
                                                                                                                                                                            &activationResourceId=`25`
                                                                                                                                                                            &successMsg=`<p>Спасибо за регистрацию. На вашу электронную почту [[!+reg.email]] отправлено письмо, содержащее ссылку, необходимую для активацию аккаунта. Перейдите по этой ссылке, чтобы завершить процедуру регистрации.</p>`
                                                                                                                                                                            &usergroups=`Users`
                                                                                                                                                                            &usernameField=`email`
                                                                                                                                                                            &passwordField=`passwd`    
                                                                                                                                                                            &validate=`nospam:blank,
                                                                                                                                                                              passwd:required:minLength=^8^,
                                                                                                                                                                              passwdAgain:passwdAgain=^passwd^,
                                                                                                                                                                              fullname:required,
                                                                                                                                                                              email:required:email`
                                                                                                                                                                            &placeholderPrefix=`reg.`
                                                                                                                                                                        ]]
                                                                                                                                                                        			<div id="cd-signup"> <!-- форма регистрации -->
                                                                                                                                                                        			 [[!+error.message:eq=``:then=`
                                                                                                                                                                        				<form action="[[~[[*id]]]]" method="post" class="cd-form">
                                                                                                                                                                        				<input type="hidden" name="nospam" id="nospam" value="[[!+reg.nospam]]">
                                                                                                                                                                        					<p class="fieldset">
                                                                                                                                                                        						<label class="image-replace cd-username" for="signup-username">Имя пользователя</label>
                                                                                                                                                                        						<input name="fullname" class="full-width has-padding has-border" id="fullname" type="text" placeholder="Имя пользователя" value="[[!+reg.fullname]]">
                                                                                                                                                                        						<span class="cd-error-message">[[!+reg.error.fullname]]</span>
                                                                                                                                                                        					</p>
                                                                                                                                                                        
                                                                                                                                                                        					<p class="fieldset">
                                                                                                                                                                        						<label class="image-replace cd-email" for="email">E-mail</label>
                                                                                                                                                                        						<input name="email" class="full-width has-padding has-border" id="email" type="email" placeholder="E-mail" value="[[!+reg.email]]">
                                                                                                                                                                        						<span class="cd-error-message">[[!+reg.error.email]]</span>
                                                                                                                                                                        					</p>
                                                                                                                                                                        
                                                                                                                                                                        					<p class="fieldset">
                                                                                                                                                                        						<label class="image-replace cd-password" for="signup-password">Пароль</label>
                                                                                                                                                                        						<input name="passwd" class="full-width has-padding has-border" id="passwd" type="password"  placeholder="Пароль" value="[[!+reg.passwd]]">
                                                                                                                                                                        						<a href="#0" class="hide-password">Скрыть</a>
                                                                                                                                                                        						<span class="cd-error-message">[[!+reg.error.passwd]]</span>
                                                                                                                                                                        					</p>
                                                                                                                                                                        					
                                                                                                                                                                        					<p class="fieldset">
                                                                                                                                                                        						<label class="image-replace cd-password" for="signup-password">Подтвердите пароль:</label>
                                                                                                                                                                        						<input name="passwdAgain" class="full-width has-padding has-border" id="passwdAgain" type="password" placeholder="Введите пароль ещё раз" value="[[!+reg.passwdAgain]]">
                                                                                                                                                                        						<a href="#0" class="hide-password">Скрыть</a>
                                                                                                                                                                        						<span class="cd-error-message">[[!+reg.error.passwdAgain]]</span>
                                                                                                                                                                        					</p>
                                                                                                                                                                        
                                                                                                                                                                        					<p class="fieldset">
                                                                                                                                                                        						<input name="submitbtn" id="submitbtn" class="full-width has-padding" type="submit" value="Создать аккаунт">
                                                                                                                                                                        					</p>
                                                                                                                                                                        				</form>
                                                                                                                                                                        				`:else=`<div class="alert alert-success">[[!+error.message]]</div>`]]
                                                                                                                                                                        
                                                                                                                                                                        				<!-- <a href="#0" class="cd-close-form">Close</a> -->
                                                                                                                                                                        			</div> <!-- cd-signup -->
                                                                                                                                                                        
                                                                                                                                                                        			<div id="cd-reset-password"> <!-- форма восстановления пароля -->
                                                                                                                                                                        				<p class="cd-form-message">Забыли пароль? Пожалуйста, введите адрес своей электронной почты. Вы получите ссылку, чтобы создать новый пароль.</p>
                                                                                                                                                                        
                                                                                                                                                                        				<form class="cd-form">
                                                                                                                                                                        					<p class="fieldset">
                                                                                                                                                                        						<label class="image-replace cd-email" for="reset-email">E-mail</label>
                                                                                                                                                                        						<input class="full-width has-padding has-border" id="reset-email" type="email" placeholder="E-mail">
                                                                                                                                                                        						<span class="cd-error-message">Здесь сообщение об ошибке!</span>
                                                                                                                                                                        					</p>
                                                                                                                                                                        
                                                                                                                                                                        					<p class="fieldset">
                                                                                                                                                                        						<input class="full-width has-padding" type="submit" value="Восстановить пароль">
                                                                                                                                                                        					</p>
                                                                                                                                                                        				</form>
                                                                                                                                                                        
                                                                                                                                                                        				<p class="cd-form-bottom-message"><a href="#0">Вернуться к входу</a></p>
                                                                                                                                                                        			</div> <!-- cd-reset-password -->
                                                                                                                                                                        			<a href="#0" class="cd-close-form">Закрыть</a>
                                                                                                                                                                        		</div> <!-- cd-user-modal-container -->
                                                                                                                                                                        	</div> <!-- cd-user-modal -->
                                                                                                                                                                        Модальное окно видно, форма там тоже есть. При попытке авторизации нет никакой реакции на нажатие кнопки Войти. При регистрации постоянная ошибка электронного адреса. Тот же код на отдельной странице работает отлично. В чем я напортачил?
                                                                                                                                                                        1. Легион
                                                                                                                                                                          20 июня 2016, 09:42
                                                                                                                                                                          Попробовал оригинальный шаблон — работает. Только фишка в том, что при нажатии на кнопку войти она срабатывает только в определенных местах. Например, если нажать посреди кнопки — ничего не произойдет, а вот если с серого верхнего края — работает. Справа уже нет. Но это даже не суть. С этим еще можно разобраться. Не могу понять, почему не работает именно мой код. Они же практически идентичны.
                                                                                                                                                                          <div id="cd-login"> <!-- форма входа -->
                                                                                                                                                                          	<p class="text-danger">[[+errors]]</p>
                                                                                                                                                                          				<form class="cd-form" action="[[~[[*id]]]]" method="post">
                                                                                                                                                                          					<p class="fieldset">
                                                                                                                                                                          						<label for="username" class="image-replace cd-email">[[%login.username]]</label>
                                                                                                                                                                          						<input class="full-width has-padding has-border" type="text" name="username" id="username">
                                                                                                                                                                          					</p>
                                                                                                                                                                          
                                                                                                                                                                          					<p class="fieldset">
                                                                                                                                                                          						<label class="image-replace cd-password" for="password">[[%login.password]]<</label>
                                                                                                                                                                          						<input class="full-width has-padding has-border" type="password" name="password" id="password"">
                                                                                                                                                                          						<a href="#0" class="hide-password">Показать</a>
                                                                                                                                                                          					</p>
                                                                                                                                                                          
                                                                                                                                                                          					<p class="fieldset">
                                                                                                                                                                          			<input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]" />
                                                                                                                                                                                      <input class="loginLoginValue" type="hidden" name="service" value="login">
                                                                                                                                                                          			<input type="submit" value="[[+actionMsg]]" name="Login" id="Login" class="full-width">
                                                                                                                                                                          					</p>
                                                                                                                                                                          				</form>
                                                                                                                                                                          
                                                                                                                                                                          
                                                                                                                                                                          <!-- Оригинальный шаблон -->
                                                                                                                                                                          <div class="loginForm">
                                                                                                                                                                              <div class="loginMessage">[[+errors]]</div>
                                                                                                                                                                              <div class="loginLogin">
                                                                                                                                                                                  <form class="loginLoginForm" action="[[~[[*id]]]]" method="post">
                                                                                                                                                                                      <fieldset class="loginLoginFieldset">
                                                                                                                                                                                          <legend class="loginLegend">[[+actionMsg]]</legend>
                                                                                                                                                                                          <label class="loginUsernameLabel">[[%login.username]]
                                                                                                                                                                                              <input class="loginUsername" type="text" name="username" />
                                                                                                                                                                                          </label>
                                                                                                                                                                                          
                                                                                                                                                                                          <label class="loginPasswordLabel">[[%login.password]]
                                                                                                                                                                                              <input class="loginPassword" type="password" name="password" />
                                                                                                                                                                                          </label>
                                                                                                                                                                                          <input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]" />
                                                                                                                                                                          
                                                                                                                                                                                          [[+login.recaptcha_html]]
                                                                                                                                                                                          
                                                                                                                                                                                          <input class="loginLoginValue" type="hidden" name="service" value="login" />
                                                                                                                                                                                          <span class="loginLoginButton"><input type="submit" name="Login" value="[[+actionMsg]]" /></span>
                                                                                                                                                                                      </fieldset>
                                                                                                                                                                                  </form>
                                                                                                                                                                              </div>
                                                                                                                                                                          </div>
                                                                                                                                                                          
                                                                                                                                                                          1. Легион
                                                                                                                                                                            20 июня 2016, 10:06
                                                                                                                                                                            Все чудоватей и чудоватей. Попробовал тупо заменить стили из оригинала на свои, и уже перестала оригинальная форма работать. В первый раз такое вижу.
                                                                                                                                                                    2. Михаил
                                                                                                                                                                      10 мая 2016, 23:42
                                                                                                                                                                      Добрый вечер!!! Так и не дождавшись от Вас ответа по поводу загрузки одновременно нескольких фотографий в качестве аватарки, а именно не разобрался как каждой фотографии передать значение дополнительной формы или ТВ параметра! Искал различные решения, но собрал в кучу, но все равно не получается передать значение поля для каждой фотографии свое name=«img_[]» номера от 0 до 9. вот что получилось, подскажите как можно это доработать, и при этом видеть эскизы изображений и можно назначить главное фото img_0

                                                                                                                                                                      вот скрипт
                                                                                                                                                                      <script>
                                                                                                                                                                      var data = {
                                                                                                                                                                          data: [],
                                                                                                                                                                          length: function (){
                                                                                                                                                                              return this.data.length;
                                                                                                                                                                          },
                                                                                                                                                                          set: function (x) {
                                                                                                                                                                              this.data.push(x);
                                                                                                                                                                              return this;
                                                                                                                                                                          },
                                                                                                                                                                          clear: function () {
                                                                                                                                                                              this.data.length = 0;
                                                                                                                                                                              return this;
                                                                                                                                                                          },
                                                                                                                                                                          del: function (x) {
                                                                                                                                                                              return this.data.splice(x, 1);
                                                                                                                                                                          },
                                                                                                                                                                          uni: function (x) {
                                                                                                                                                                              var i = this.data.length;
                                                                                                                                                                              while (i--) {
                                                                                                                                                                                  if (this.data[i].name === x.name) {
                                                                                                                                                                                      return true;
                                                                                                                                                                                  }
                                                                                                                                                                              }
                                                                                                                                                                              return false;
                                                                                                                                                                          }
                                                                                                                                                                      };
                                                                                                                                                                      $('#files').change(function(){
                                                                                                                                                                          var error='';
                                                                                                                                                                          var type =[ "image/jpeg",  "image/jpg",  "image/gif",  "image/png"];
                                                                                                                                                                          $.each(this.files, function(i, file) {
                                                                                                                                                                              if(data.length() >9 ){
                                                                                                                                                                                error += 'Разрешено не более 10 файлов\n\r';   
                                                                                                                                                                              } else if($.inArray(file.type, type)==-1){
                                                                                                                                                                                error += 'Недопустимое разрешение файла - ' + file.name+'\n\r';
                                                                                                                                                                              } else if(file.size > 2097152){
                                                                                                                                                                                error += file.name+' - размер файла больше 2Мб\n\r';  
                                                                                                                                                                              }else if(data.uni(file)===false) {
                                                                                                                                                                                  data.set(file);
                                                                                                                                                                                  $('#list_files').append('<li>'+file.name+'<i data-file="'+data.length()+'">x</i></li>');
                                                                                                                                                                              }
                                                                                                                                                                          });
                                                                                                                                                                          if (error.length) alert(error);
                                                                                                                                                                      });
                                                                                                                                                                      
                                                                                                                                                                      $('#list_files').on('click', 'i', function(){
                                                                                                                                                                          data.del($(this).data('file')-1);
                                                                                                                                                                          $(this).parent().remove();
                                                                                                                                                                      });
                                                                                                                                                                      
                                                                                                                                                                      $('#clear_all').click(function(){
                                                                                                                                                                          $('#list_files li').remove();
                                                                                                                                                                          data.clear();
                                                                                                                                                                      });
                                                                                                                                                                      </script>
                                                                                                                                                                      а это загрузка файла
                                                                                                                                                                      <input type="file" multiple="multiple" name="img_[]" accept="image" required="required" title="Необходимо выбрать минимум один файл" id="files" />
                                                                                                                                                                      <ul id="list_files"></ul>
                                                                                                                                                                      <span id="clear_all">Очистить все</span>
                                                                                                                                                                      1. Александр Мальцев
                                                                                                                                                                        11 мая 2016, 11:27
                                                                                                                                                                        Не вижу смысла создавать загрузку файлов для страницы Регистрация. Как создать аватарку пользователю расскажу в отдельном уроке.
                                                                                                                                                                        1. Павел
                                                                                                                                                                          28 октября 2017, 18:57
                                                                                                                                                                          Прошу прощения, что ввязался в разговор (хоть ему уже и полтора года =) ).
                                                                                                                                                                          Заказчик требует прикрепления файла, например, скан доверенности, при регистрации.
                                                                                                                                                                          В этом есть смысл. Хотя, так же появляется шанс словить вредонос…
                                                                                                                                                                          Какие мысли по этому поводу?
                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                            30 октября 2017, 16:02
                                                                                                                                                                            В этом случае вам необходимо написать сниппет с необходимой логикой. После этого привязать полученный сниппет к Register с помощью параметра postHooks.
                                                                                                                                                                      2. Михаил
                                                                                                                                                                        02 мая 2016, 17:42
                                                                                                                                                                        С праздником Светлой Пасхи!
                                                                                                                                                                        Добрых и Светлых Людей Вам на жизненном пути!!!
                                                                                                                                                                        1. Михаил
                                                                                                                                                                          26 апреля 2016, 23:11
                                                                                                                                                                          Как всегда всё очень детально разобрано и понятно! Спасибо!
                                                                                                                                                                          Но вот есть некоторые ситуации, которые вы не разбираете или считаете, что их будут писать в комментариях:
                                                                                                                                                                          1 — Объясните пожалуйста, есть ли смысл в форму регистрации добавлять Captcha, если да, то как с привязкой к Login?
                                                                                                                                                                          2 — Как в форме регистрации добавить дополнительные поля, которые нужно заполнять, причем поля, которые есть в стандартном формуляре пользователя (телефон, адрес, город), и которые нужно добавить в стандартный формуляр пользователя (специальность, хобби)?
                                                                                                                                                                          1. Александр Мальцев
                                                                                                                                                                            30 апреля 2016, 01:32
                                                                                                                                                                            Все моменты не рассмотришь.
                                                                                                                                                                            1. Есть, для защиты от спама. Это сделается с помощью параметра preHooks. Например, можно использовать reCaptcha (необходимо установить) или какую-нибудь собственную.
                                                                                                                                                                            Добавляется reCaptcha так:
                                                                                                                                                                            — Добавляем в вызов сниппета Register параметр preHooks и указываем recaptcha:
                                                                                                                                                                            [[!Register?
                                                                                                                                                                              &preHooks=`recaptcha`
                                                                                                                                                                              ...
                                                                                                                                                                            
                                                                                                                                                                            — добавляем в форму плейсхолдер:
                                                                                                                                                                            [[+login.recaptcha_html]]
                                                                                                                                                                            
                                                                                                                                                                            2. Указывайте их при регистрации и они будут заполняться.
                                                                                                                                                                            Например, город:
                                                                                                                                                                            <label for="city">Город:</label>
                                                                                                                                                                            <input type="text" name="city" id="city" placeholder="Введите город" value="[[!+reg.city]]">
                                                                                                                                                                            
                                                                                                                                                                            Тоже самое и с расширенными полями.
                                                                                                                                                                            Например, color (расширенный атрибут):
                                                                                                                                                                            <label for="color">Цвет:</label>
                                                                                                                                                                            <input type="text" name="color" id="color" placeholder="Введите цвет" value="[[!+reg.color]">
                                                                                                                                                                            
                                                                                                                                                                            1. Михаил
                                                                                                                                                                              02 мая 2016, 17:41
                                                                                                                                                                              Спасибо огромное!!!
                                                                                                                                                                              Если Вас не затруднит, то расскажите, пожалуйста, подробнее следующее:
                                                                                                                                                                              -1. Как прописать в форме выбор значения из доступных -2. Нужно в форму добавить мультимедийную загрузку файлов (изображений) до 10 шт., но при этом можно было бы загружать по одной фото и сразу все, с указанием одной главной фото. Есть ли готовое решение для форм? Как это можно реализовать?
                                                                                                                                                                          Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.