SkazZzo4nik Опубликовано 20 июня, 2015 Жалоба Поделиться Опубликовано 20 июня, 2015 Возникла необходимость сделать автоматическую регистрацию.На 100% правильность и надежность метода не претендую!Следующий код необходимо добавить в CartView.php После: if($bonus && $order->total_price == 0) { $this->orders->update_order($order->id, array('paid'=>'1')); } где-то на 117 строчке //Определяем ip пользователя if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } //Если мы не знаем юзера if(!$this->user) { //Смотрим есть ли такой email в базе $this->db->query('SELECT count(*) as count FROM __users WHERE email=?', $order->email); $user_exists = $this->db->result('count'); if($user_exists) { //Если нашли, то добавляем заказ к найденому пользователю $this->db->query('SELECT * FROM __users WHERE email=?', $order->email); $user_exists_id = $this->db->result('id'); $this->orders->update_order($order->id, array('user_id'=>$user_exists_id)); } else { //Если не нешли, то генерируем пароль, согдаем пользователя, отправляем ему письмо и добавляем заказ к созданому пользователю $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; $max=10; $size=StrLen($chars)-1; $password=null; while($max--) $password.=$chars[rand(0,$size)]; $user_id = $this->users->add_user(array('email'=>$order->email, 'password'=>$password, 'name'=>$order->name, 'group_id'=>'2', 'enabled'=>'1', 'last_ip'=>$ip, 'phone'=>$order->phone)); $this->orders->update_order($order->id, array('user_id'=>$user_id)); $this->notify->email_registration($user_id, $password); $_SESSION['user_id'] = $user_id; } } Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 20 июня, 2015 Жалоба Поделиться Опубликовано 20 июня, 2015 На стандартной Simpla это не работает. Видимо, работает на своем сайте с нужными изменениями... Цитата Ссылка на сообщение Поделиться на другие сайты
SkazZzo4nik Опубликовано 20 июня, 2015 Автор Жалоба Поделиться Опубликовано 20 июня, 2015 На стандартной Simpla это не работает.Видимо, работает на своем сайте с нужными изменениями...Скорее всего да, вот строчка: $user_id = $this->users->add_user(array('email'=>$order->email, 'password'=>$password, 'name'=>$order->name, 'group_id'=>'2', 'enabled'=>'1', 'last_ip'=>$ip, 'phone'=>$order->phone)); тут мои параметры, нужно заменить на: $user_id = $this->users->add_user(array('email'=>$order->email, 'password'=>$password, 'name'=>$order->name, 'enabled'=>'1', 'last_ip'=>$ip)); Цитата Ссылка на сообщение Поделиться на другие сайты
Gandalf Опубликовано 20 июня, 2015 Жалоба Поделиться Опубликовано 20 июня, 2015 У меня выдает ошибку :Fatal error: Call to undefined method Notify::email_registration() in /.../view/CartView.php on line 150 Цитата Ссылка на сообщение Поделиться на другие сайты
SkazZzo4nik Опубликовано 20 июня, 2015 Автор Жалоба Поделиться Опубликовано 20 июня, 2015 (изменено) У меня выдает ошибку :Fatal error: Call to undefined method Notify::email_registration() in /.../view/CartView.php on line 150Добавить в тему шаблон письма о регистрации email_registration.tpl {$subject = "Регистрация на сайте `$settings->site_name`" scope=parent} <html> <body> <p>{$user->name|escape} Вы успешно были зарегистрированы на сайте <a href='http://{$config->root_url}/'>{$settings->site_name}</a>.</p> <p>Ваш логин: <b>{$user->email}</b></p> <p>Ваш пароль: <b>{$password}</b></p> </body> </html> в Notify.php в конце, перед последней скобкой } // Функция отправки письма о регистрации public function email_registration($user_id, $password) { if(!($user = $this->users->get_user(intval($user_id)))) return false; $this->design->assign('password', $password); $this->design->assign('user', $user); // Отправляем письмо $email_template = $this->design->fetch($this->config->root_dir.'design/'.$this->settings->theme.'/html/email_registration.tpl'); $subject = $this->design->get_var('subject'); $this->email($user->email, $subject, $email_template, $this->settings->site_name.' <'.$this->settings->notify_from_email.'>'); } Изменено 20 июня, 2015 пользователем SkazZzo4nik Цитата Ссылка на сообщение Поделиться на другие сайты
Решение SkazZzo4nik Опубликовано 21 июня, 2015 Автор Решение Жалоба Поделиться Опубликовано 21 июня, 2015 Действительно, первый вариант был с моими наработками, поэтому на стандартной версии не работал.Вот рабочий вариант:CartView.php перед строчкой: // Отправляем письмо пользователю $this->notify->email_order_user($order->id); //Определяем ip пользователя if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } //Если мы не знаем юзера if(!$this->user) { //Смотрим есть ли такой email в базе $this->db->query('SELECT count(*) as count FROM __users WHERE email=?', $order->email); $user_exists = $this->db->result('count'); if($user_exists) { //Если нашли, то добавляем заказ к найденому пользователю $this->db->query('SELECT * FROM __users WHERE email=?', $order->email); $user_exists_id = $this->db->result('id'); $this->orders->update_order($order->id, array('user_id'=>$user_exists_id)); } else { //Если не нешли, то генерируем пароль, согдаем пользователя, отправляем ему письмо и добавляем заказ к созданому пользователю $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; $max=10; $size=StrLen($chars)-1; $password=null; while($max--) $password.=$chars[rand(0,$size)]; $user_id = $this->users->add_user(array('email'=>$order->email, 'password'=>$password, 'name'=>$order->name, 'enabled'=>'1', 'last_ip'=>$ip)); $this->orders->update_order($order->id, array('user_id'=>$user_id)); $this->notify->email_registration($user_id, $password); $_SESSION['user_id'] = $user_id; } } Добавить в тему шаблон письма о регистрации email_registration.tpl {$subject = "Регистрация на сайте `$settings->site_name`" scope=parent} <html> <body> <p>{$user->name|escape} Вы успешно были зарегистрированы на сайте <a href='http://{$config->root_url}/'>{$settings->site_name}</a>.</p> <p>Ваш логин: <b>{$user->email}</b></p> <p>Ваш пароль: <b>{$password}</b></p> </body> </html> в Notify.php в конце, перед последней скобкой } // Функция отправки письма о регистрации public function email_registration($user_id, $password) { if(!($user = $this->users->get_user(intval($user_id)))) return false; $this->design->assign('password', $password); $this->design->assign('user', $user); // Отправляем письмо $email_template = $this->design->fetch($this->config->root_dir.'design/'.$this->settings->theme.'/html/email_registration.tpl'); $subject = $this->design->get_var('subject'); $this->email($user->email, $subject, $email_template, $this->settings->site_name.' <'.$this->settings->notify_from_email.'>'); } 1. Если клиент указал существующий в базе пользователей email, то заказ привяжется к пользователю с этим email.2. Если указанный email не найдет в нашей базе 2.1. Регистрируем пользователя. 2.2. Отправляем ему письмо с логином и паролем 2.3. Логинимся под новым пользователем Цитата Ссылка на сообщение Поделиться на другие сайты
Gandalf Опубликовано 21 июня, 2015 Жалоба Поделиться Опубликовано 21 июня, 2015 Спасибо, все работает Цитата Ссылка на сообщение Поделиться на другие сайты
LUN Опубликовано 1 июля, 2015 Жалоба Поделиться Опубликовано 1 июля, 2015 Это офигенная штука!А как сделать чтобы поле "телефон" из корзины, тоже добавлялся в личный кабинет ? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 июля, 2015 Жалоба Поделиться Опубликовано 1 июля, 2015 (изменено) Это офигенная штука!А как сделать чтобы поле "телефон" из корзины, тоже добавлялся в личный кабинет ? добавить поле phone в таблицу s_users и заменить это: $user_id = $this->users->add_user(array('email'=>$order->email, 'password'=>$password, 'name'=>$order->name, 'enabled'=>'1', 'last_ip'=>$ip)); на: $user_id = $this->users->add_user(array('email'=>$order->email, 'phone'=>$order->phone,'password'=>$password, 'name'=>$order->name, 'enabled'=>'1', 'last_ip'=>$ip)); Изменено 1 июля, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 1 июля, 2015 Жалоба Поделиться Опубликовано 1 июля, 2015 А потом еще в десятке мест это поле учесть, вплоть до экспорта покупателей... Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 1 июля, 2015 Жалоба Поделиться Опубликовано 1 июля, 2015 А потом еще в десятке мест это поле учесть, вплоть до экспорта покупателей... в помощь статья Цитата Ссылка на сообщение Поделиться на другие сайты
Sharfik Опубликовано 17 августа, 2015 Жалоба Поделиться Опубликовано 17 августа, 2015 Спасибо участникам за такую замечательную идею и бесплатную реализацию! Можно ли пароль не генерировать, а брать номер телефона в качестве пароля? Только для новых пользователей Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 17 августа, 2015 Жалоба Поделиться Опубликовано 17 августа, 2015 (изменено) Спасибо участникам за такую замечательную идею и бесплатную реализацию! Можно ли пароль не генерировать, а брать номер телефона в качестве пароля? Только для новых пользователей замените это: $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; $max=10; $size=StrLen($chars)-1; $password=null; while($max--) $password.=$chars[rand(0,$size)]; на $password=$order->phone; тогда в качестве пароля на почту будет приходить телефон, указанный в графе телефон для заказа Изменено 17 августа, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Sharfik Опубликовано 17 августа, 2015 Жалоба Поделиться Опубликовано 17 августа, 2015 замените это: $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; $max=10; $size=StrLen($chars)-1; $password=null; while($max--) $password.=$chars[rand(0,$size)]; на $password=$order->phone; тогда в качестве пароля на почту будет приходить телефон, указанный в графе телефон для заказаспасибо!только все пишут номер как попало: то +7, то через 8, то без первой цифры, то () и - внутри номера можно ли взять указанный телефон и привести его к должному виду: 1. удалить все кроме цифр (),-,+, ,_...2. отсчитать 10 цифр с конца Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 17 августа, 2015 Жалоба Поделиться Опубликовано 17 августа, 2015 Попробуйте использоватьhttp://digitalbush.com/projects/masked-input-plugin/#usage Цитата Ссылка на сообщение Поделиться на другие сайты
Sharfik Опубликовано 17 августа, 2015 Жалоба Поделиться Опубликовано 17 августа, 2015 Попробуйте использоватьhttp://digitalbush.com/projects/masked-input-plugin/#usageспасибо, поставил маску слитного набора и 8 вначале Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 8 сентября, 2015 Жалоба Поделиться Опубликовано 8 сентября, 2015 Подскажите, приходит письмо в странной кодировке.Вот так �� ������� ���� ���������������� �� � Цитата Ссылка на сообщение Поделиться на другие сайты
Consult Опубликовано 8 сентября, 2015 Жалоба Поделиться Опубликовано 8 сентября, 2015 Шаблон письма надо было в UTF-8 без BOM Цитата Ссылка на сообщение Поделиться на другие сайты
wildrock Опубликовано 20 ноября, 2015 Жалоба Поделиться Опубликовано 20 ноября, 2015 замените это: $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; $max=10; $size=StrLen($chars)-1; $password=null; while($max--) $password.=$chars[rand(0,$size)]; на $password=$order->phone; тогда в качестве пароля на почту будет приходить телефон, указанный в графе телефон для заказаМиш а как оповещении при регистрации на стандартный метод?? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 20 ноября, 2015 Жалоба Поделиться Опубликовано 20 ноября, 2015 Миш а как оповещении при регистрации на стандартный метод?? не понял? стандартно пользователь вводит сам пароль, при регистрации, поэтому ему не отправляет этот пароль на почту. или о чем речь? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 20 ноября, 2015 Жалоба Поделиться Опубликовано 20 ноября, 2015 Миш а как оповещении при регистрации на стандартный метод??Уже давно есть готовое решение по этому вопросу. Цитата Ссылка на сообщение Поделиться на другие сайты
cernos Опубликовано 27 декабря, 2015 Жалоба Поделиться Опубликовано 27 декабря, 2015 Спасибо за хорошее решение! Цитата Ссылка на сообщение Поделиться на другие сайты
MRGLONIN Опубликовано 23 сентября, 2016 Жалоба Поделиться Опубликовано 23 сентября, 2016 Данный модуль больше не работает ?. на 2.3.7. Сообщение с данными не приходит. Но пользователь создается. Цитата Ссылка на сообщение Поделиться на другие сайты
MRGLONIN Опубликовано 23 сентября, 2016 Жалоба Поделиться Опубликовано 23 сентября, 2016 Все работает. Только письмо ушло в спам. Как решить проблему ? Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 23 сентября, 2016 Жалоба Поделиться Опубликовано 23 сентября, 2016 Все работает. Только письмо ушло в спам. Как решить проблему ?http://forum.simplacms.ru/topic/5654-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0-%D0%BF%D0%B8%D1%81%D0%B5%D0%BC-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-%D1%81%D1%82%D0%BE%D1%80%D0%BE%D0%BD%D0%BD%D0%B8%D0%B9-smtp/http://forum.simplacms.ru/topic/9389-%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F-%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0-%D0%BC%D1%8B%D0%BB%D0%B0-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-stmp/ Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.