Ручное подтверждение регистрации
Вопрос наверняка очень простой, но не могу понять как сделать ручное подтверждение регистрации. Т.е. нужно чтобы письмо сразу после регистрации не приходило, а приходило позже, когда данные человека будут проверены. Как это можно реализовать — подскажите, пожалуйста.
Комментарии: 15
1. Добавить 2 поля в юзеру в extended, например verified и sent
2. Написать плагин на событие OnUserSave, которое будет проверять verified == 1 && sent != 1
3. При одобрении юзера ставить ему verified = 1, а при отправке плагин ему поставит sent = 1
Таким образом почта будет отправляться юзеру только один раз, при ручном одобрении.
2. Написать плагин на событие OnUserSave, которое будет проверять verified == 1 && sent != 1
3. При одобрении юзера ставить ему verified = 1, а при отправке плагин ему поставит sent = 1
Таким образом почта будет отправляться юзеру только один раз, при ручном одобрении.
Не все так просто)
Спасибо!
Спасибо!
Удалось отменить отправку письма по активации аккаунта (теперь все письма уходят на одну почту), дополнительные поля выставляются при регистрации. Вопрос по плагину, а вернее по тому как написать чтобы отправлялось письмо? Где читать документацию по переменным?
как отправить письмо:
я использую такой вариант:
$message = $modx->getChunk('ваш_чанк', массив_переменных); // либо можно без чанка тело просто оформить
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$message);
$modx->mail->set(modMail::MAIL_FROM,$modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME,$modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SENDER,$modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SUBJECT,'тема письма');
$modx->mail->address('to',$email); // тут мыло кому отправляете
$modx->mail->address('reply-to',$modx->getOption('emailsender'));
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
return false;
}
$modx->mail->reset();
событие OnUserSave rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins/system-events/onusersaveя использую такой вариант:
if ($modx->event->name === 'OnUserSave' && $mode === 'new') {
так получаем мыло
$profile = $user->getOne('Profile');
$email = $profile->get('email');
тут ваш код, либо мой, который выше
}
Огромное спасибо! Попробую адаптировать под свои задачи)
Получилось! Но не совсем) Я указала чанк, в котором используются [[+name]], [[+password]] и они в таком виде и приходят (в виде кода). Как это можно исправить?
В этом случае придется генерить пароль за людей. как-то вот так:
// генерим пароль
$pass = $modx->user->generatePassword();
$user->set('password',$pass);
$user->set('active','1');
$user->save();
$data_array = ['name' = $profile->get('fullname'), 'password' => $pass];
$message = $modx->getChunk('ваш_чанк', $data_array);
если нужно брать пароль, который вводит пользователь, то надо писать не в плагин, а в постхук Login
Пароль у меня генерируется средствами modx… не совсем поняла причем тут генерация пароля — там же и имя тоже не «расшифровывается». Да и ссылка [[+confirmUrl]] там должна быть в письме. Неужели надо все с нуля генерировать?
И еще вопрос:
И еще вопрос:
$message = $modx->getChunk('ваш_чанк', массив_переменных);
здесь какой массив переменных имеется в виду?
я ж вам в предыдущем сообщение привел пример массива.
суть в том, что в плагине нужно получить пароль, чтобы отправить его в письме, но это невозможно, поэтому необходимо генерировать его снова и записывать в аккаунт, тогда он сохраняется в нашей переменной и мы можем передать его в чанк
суть в том, что в плагине нужно получить пароль, чтобы отправить его в письме, но это невозможно, поэтому необходимо генерировать его снова и записывать в аккаунт, тогда он сохраняется в нашей переменной и мы можем передать его в чанк
А подскажите, пожалуйста… Вот этот чанк —
Пока при попытке добавить массив — у меня после отправки формы для регистрации нового пользователя выходит белая страница. Как только убираю этот массив — все хорошо.
$message = $modx->getChunk('ваш_чанк', массив_переменных);
Для чего он тогда нужен? Или можно его использовать если правильно написать туда переменные?Пока при попытке добавить массив — у меня после отправки формы для регистрации нового пользователя выходит белая страница. Как только убираю этот массив — все хорошо.
чанк создан для разделения оформления и непосредственно самого php-кода, можно и без чанка просто в эту переменную написать всё оформление.
надеюсь, вместо «ваш_чанк» вы пишите название вашего чанка?
и вообще, было бы не плохо показывать свой нерабочий код
надеюсь, вместо «ваш_чанк» вы пишите название вашего чанка?
и вообще, было бы не плохо показывать свой нерабочий код
Т.е. в этот чанк можно писать переменные? Типа $name? Чанк — это же кусок html-кода… там такое не прокатит.
<?php
if ($modx->event->name === 'OnUserSave' && $mode === 'new') {
$profile = $user->getOne('Profile');
$email = $profile->get('email');
$extended = $profile->get('extended');
/*$data_array = [
'username' => $profile->get('username'),
'name' => $profile->get('fullname'),
'password' => $profile->get('password'
];
*/
if($extended['verified']=='1' && $extended['sent']=='0'){
$message = $modx->getChunk('rulgnActivateEmailTpl'/*, $data_array*/);
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY, $message);
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SENDER, $modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SUBJECT, 'Подтверждение регистрации');
$modx->mail->address('to',$email);
$modx->mail->address('reply-to',$modx->getOption('emailsender'));
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
return false;
}
$modx->mail->reset();
$extended['sent']='1';
$profile->set('extended', $extended);
$profile->save();
}
}
ну да. например:
$messageFields = [
'test1' => '123',
'test2' => '321'
];
$message = $modx->getChunk('TestEmailTpl', $messageFields);
и в чанке TestEmailTpltest1: [[+test1]]
test2: [[+test2]]
в итоге при использовании выведетtest1: 123
test2: 321
Т.е. вроде все правильно. Буду искать тогда почему не работает с массивом. Еще раз спасибо!
$data_array = [у вас тут не хватает скобки $profile->get('password'
'username' => $profile->get('username'),
'name' => $profile->get('fullname'),
'password' => $profile->get('password'
];
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.