При заказе товара пользователь бы регистрировался?
Здравствуйте. Подскажите пожалуйста, как сделать:
Когда пользователь заказал товар, то он автоматически регистрировался и к нему приходило письмо об регистрации
joxi.ru/brR8g7bUBbDg21
Когда пользователь заказал товар, то он автоматически регистрировался и к нему приходило письмо об регистрации
joxi.ru/brR8g7bUBbDg21
Комментарии: 3
Так он и так автоматически регистрируется, только письмо не отправляется.
Но можно написать плагин на создание нового заказа от нового юзера, наверное.
Но можно написать плагин на создание нового заказа от нового юзера, наверное.
Вот какой-то плагин писал давненько. Как раз отсылает мыло. А если мыло не ввели, то создаёт юзера вот с таким мылом «телефон@сайт-на-котором-регается-юзер.ru». На том сайте мне надо было вводить либо мыло, либо телефон. Поэтому такое решение.
Обновлено: В конце там у нас есть код — если юзер авторизован, то записать данные введённые в заказе в Profile.
Обновлено: В конце там у нас есть код — если юзер авторизован, то записать данные введённые в заказе в Profile.
<?php
$mail_subj_text = 'Регистрация на ' . $modx->getOption('site_name');
$chunk_mail_reg = 'tpl.mail.userRegisterFromOrderSubmit';
$suffix_email = '@сайт-на-котором-регается-юзер.ru';
switch ($modx->event->name)
{
// Обработка события, чтобы узнать, существовал ли юзер раньше..
// А также подставляет левый email, если он не заполнен, а "телефон" заполнен
case "msOnSubmitOrder":
$order_data = $order->get();
if( empty($order_user['email']) ) {
$order_data = $data;
}
//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $order->get() , true));
//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $data , true));
// если email пуст или он с нашим суффиксом, то подставляем ему мыло вида - "телефон@suffix_email"
if( empty($order_data['email']) || strstr($order_data['email'], $suffix_email) )
{
if( trim($order_data['phone']) != '' )
{
$phone = preg_replace( "/\D/", "", $order_data['phone'] );
$data['email'] = $order_data['email'] = ( $phone ) . $suffix_email;
}
else
{
$data['email'] = $order_data['email'] = '';
}
}
$modx->event->returnedValues['data'] = $data;
// проверяем наличие мыла
$email = $order_data['email'];
if(empty($email)) { continue; }
// проверяем на существование юзера по username=email, и если не существовал, то пишем соответствующее значение в сессию
$_SESSION['minishop2']['new_user'] = false;
if( !$modx->getCount('modUser', array('username' => $email)) )
{
$_SESSION['minishop2']['new_user'] = $email;
//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $_SESSION['minishop2']['new_user'] , true));
}
//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $data , true));
break;
case "msOnCreateOrder":
$order_user = $order->get();
// если email с суфиксом нашего сайта - то не продолжаем
if( strstr( $order_user['email'], $suffix_email ) ) { continue; }
// если не авторизован
if( !$modx->user->isAuthenticated($modx->context->key) )
{
$email = $order_user['email'];
if(empty($email)) {return false;}
$user = $modx->getObject("modUser", array('username' => $email) );
// Если юзер не существовал раньше (при событии msOnSubmitOrder), то ставим ему новый пароль и шлём сообщение о регистрации на мыло
if( $_SESSION['minishop2']['new_user'] == $email )
{
$new_password = substr( md5(rand()), 0, 9 );
$user->set('password', $new_password );
$user->save();
$modx->log(modX::LOG_LEVEL_ERROR, print_r( $new_password , true));
// формируем письмо (тему и текст)
$mail_subj = $mail_subj_text;
$mail_body = $modx->getChunk( $chunk_mail_reg,
array_merge(
$user->getOne('Profile')->toArray(),
$user->toArray(),
array(
'password' => $new_password,
)
)
);
// шлём письмо
$mail = $modx->getService('mail', 'mail.modPHPMailer');
$mail->set(modMail::MAIL_BODY, $mail_body);
$mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
$mail->set(modMail::MAIL_SENDER, $modx->getOption('emailsender'));
$mail->set(modMail::MAIL_SUBJECT, trim($mail_subj));
$mail->address('to', $email);
$mail->address('reply-to', $modx->getOption('emailsender'));
$mail->setHTML(true);
$mail_response = !$mail->send()
? $mail->mailer->ErrorInfo
: true;
// пишем в лог, если письмо не ушло
if ($mail_response != true) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Не получилось отправить email на ящик '.$email.'. Сообщение: '.$mail_response);
}
$mail->reset();
}
//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $_SESSION[ 'user_' . $email ] , true));
}
else
{
$user = $modx->user;
// записываем данные из формы в профиль
$profile = $user->getOne('Profile');
$profile->set('fullname', $order_user['receiver']);
$profile->set('phone', $order_user['phone']);
$profile->set('city', $order_user['city']);
$profile->set('address', $order_user['street']);
$profile->set('comment', $order_user['comment']);
$profile->save();
}
//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $order_user , true));
break;
}
Если поле мыла не находится в форме обработки, то этот плагин не сработает.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.