При заказе товара пользователь бы регистрировался?

Здравствуйте. Подскажите пожалуйста, как сделать:
Когда пользователь заказал товар, то он автоматически регистрировался и к нему приходило письмо об регистрации
joxi.ru/brR8g7bUBbDg21
Александр Янк
16 августа 2015, 16:28
modx.pro
9
3 100
+2

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

Василий Наумкин
16 августа 2015, 19:42
0
Так он и так автоматически регистрируется, только письмо не отправляется.

Но можно написать плагин на создание нового заказа от нового юзера, наверное.
    Павел Гвоздь
    16 августа 2015, 20:43
    6
    +3
    Вот какой-то плагин писал давненько. Как раз отсылает мыло. А если мыло не ввели, то создаёт юзера вот с таким мылом «телефон@сайт-на-котором-регается-юзер.ru». На том сайте мне надо было вводить либо мыло, либо телефон. Поэтому такое решение.

    Обновлено: В конце там у нас есть код — если юзер авторизован, то записать данные введённые в заказе в 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;
    	
    }
      Кирилл Киселев
      08 мая 2018, 13:52
      0
      Если поле мыла не находится в форме обработки, то этот плагин не сработает.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3