Регистрационные данные на почту клиента, miniShop2
        Появилась задача: после заказа клиентом товаров в интернет-магазине, реализованном на miniShop2, высылать регистрационные данные (логин/пароль) на указанную почту клиента. Из коробки почему то такого функционала нет, хотя регистрация проходит. Получается так, что пользователь после оформления заказа даже и не подозревает что только что зарегистрировался на сайте. Как-то это не правильно. Собственно отсюда и появилась такая задача.
Было решено написать плагин, который через процессор MODX будет изменять пароль новому клиенту и отправлять его на указанную им почту. Пароль должен генерировать сам MODX.
Плагин сработает при условиях:
Ну и всё. Теперь ваши клиенты будут знать, что их зарегистрировали на сайте при оформлении заказа.
    
    
                                                        Было решено написать плагин, который через процессор MODX будет изменять пароль новому клиенту и отправлять его на указанную им почту. Пароль должен генерировать сам MODX.
Плагин сработает при условиях:
- Заказ имеет статус 1 (Новый)
 - С момента регистрации пользователя прошло не более 10 секунд
 
if ($modx->event->name == 'msOnChangeOrderStatus') {
	// Если статус заказа << Новый >>
        if ($status == 1) {
            $userId = $order->user_id;
            $objUser = $modx->getObject('modUser', $userId);
            $objProfile = $modx->getObject('modUserProfile', $userId);
            $time = time();
            $newUser = 10; // Сколько секунд пользователь считается новым
            
            if ($objUser && $objProfile) {
                $username = $objUser->get('username');
                $email = $objProfile->get('email');
                $createdon = strtotime($objUser->get('createdon')) + $newUser;
                $modx = new modX();
                $modx->initialize('mgr');
                $modx->getService('error','error.modError');
                
                if ($createdon > $time) {
                    $data = array(
                        'id' => $userId,
                        'username' => $username,
                        'email' => $email,
                        'newpassword' => 'passwordgenmethod', // любой набор символов
                        'passwordgenmethod' => 'g', // отдаём генерацию пароля MODX
                        'passwordnotifymethod'  => 'e', // письмо пользователю
                    );
                    
                    $response = $modx->runProcessor('/security/user/update', $data);
                    if ($response->isError()) {
                         $modx->log(modX::LOG_LEVEL_ERROR, 'Update error. Username: '.$username.', Message: '.$response->getMessage());
                    }
                }
            }
        }
}Теперь идём в системную настройку signupemail_message и изменяем тело письма на примерно следующее:<p>Здравствуйте [[+ufn]],</p>
<p>Ваши регистрационные данные для входа на сайт [[+sname]]:</p>
<p>
    <strong>Логин:</strong> [[+uid]]<br />
    <strong>Пароль:</strong> [[+pwd]]<br />
</p>
<p>После входа на сайт http://my-site.ru/, Вы сможете сменить пароль.</p>
<p>С уважением,<br />Администратор сайта</p>Можно ещё и тему письма изменить в системной настройке emailsubject.Ну и всё. Теперь ваши клиенты будут знать, что их зарегистрировали на сайте при оформлении заказа.
            
                Поблагодарить автора            
            
                 Отправить деньги            
        
        
            Комментарии: 9
                Хорошо, что кто-то наконец написал это, т.к. Очень часто задают вопрос по поводу этой задачи. Реализация далеко не сложная, но многим не понятно, как это сделать. Единственное два замечания к реализации:
1) Мне кажется, что письмо все таки лучше брать из чанка, а не настройки.
2) Такой вариант плох, когда нужно, чтобы производилась ещё и авторизация сразу после заполнения данных для заказа. В своё время стояла задача с этим пунктом и пришлось прилично подумать по этому поводу, чтобы ещё и минишопа оригинальный код не трогать.
                    1) Мне кажется, что письмо все таки лучше брать из чанка, а не настройки.
2) Такой вариант плох, когда нужно, чтобы производилась ещё и авторизация сразу после заполнения данных для заказа. В своё время стояла задача с этим пунктом и пришлось прилично подумать по этому поводу, чтобы ещё и минишопа оригинальный код не трогать.
Реализация далеко не сложнаяКонечно не сложная — вот готовое решение.
Я вчера потратит целый вечер читая исходный код по поводу вот этих двух строчек:
'newpassword' => 'passwordgenmethod',
 'passwordgenmethod' => 'g',пока мозаика не сложилась)).1. Согласен. Но у меня и не было такой задачи.
2. Авторизация без подтверждения email?
По этим двум пунктам плагином не обойтись, если делать правильно — и это совсем другие деньги.
А тут мой старый заказчик обратился, я сделал — он доволен, я поделился с сообществом. Только и всего.
                У меня по второму пункту была задача, что когда человек указывает свой E-Mail, то далее происходит проверка на его наличие в базе пользователей. Если мыла такого нет, то происходит регистрация + авторизация, а если нет, то появляется модальное окошко, в котором поле для ввода пароля. В своё время сделал это через Login + FormIt + AjaxForm            
                    
                Было уже такое — modx.pro/help/6275/
И решение там есть.
                    И решение там есть.
                Ну-да.
Так и задачи разные и реализация — ты против?
            
                    Так и задачи разные и реализация — ты против?
                Можно как то вывести сообщение в чанке tpl.msGetOrder текст формата:«Мы создали для Вам аккунт и отправили логин/пасс на почту.»? Например сделать сниппет на основе этого плагина.            
                    
                А вот эти строки
                    $modx = new modX();
$modx->initialize('mgr');
$modx->getService('error','error.modError');точно нужны? Я делал другой плагин копируя этот и у меня из-за них возникала проблема что не находит xpdo классы компонентов. Не понятно зачем нужна вообще здесь инициализация нового объекта $modx            
                Все супер. А как сделать так чтобы письмо бралось не из системной настройки а из чанка — например мне нужно туда какие то данные и ссылки по сайту вставить?            
                    
                Марат, подскажи пожалуйста, можно письмо регистрации утащить в чанк, что бы не из настроек? 
Спасибо.
                    Спасибо.
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.