Перейти к содержимому


Фото
* * * * * 5 голосов

Автоматическая регистрация пользователя


Best Answer SkazZzo4nik , 21.06.2015 - 10:50

Действительно, первый вариант был с моими наработками, поэтому на стандартной версии не работал.

Вот рабочий вариант:

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. Логинимся под новым пользователем

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
44 ответов в теме

#21 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 186 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 20.11.2015 - 17:13

Миш а как оповещении при регистрации на стандартный метод??

Уже давно есть готовое решение по этому вопросу.

#22 cernos

cernos
  • Фрилансер
  • 369 сообщений
  • Дизайн, Программирование, Верстка, Заказчик
  • Версия CMS:2.x
  • Откуда:Донецк/Москва

Опубликовано 27.12.2015 - 22:27

Спасибо за хорошее решение!



#23 MRGLONIN

MRGLONIN
  • Пользователь
  • 76 сообщений
  • Дизайн

Опубликовано 23.09.2016 - 10:26

Данный модуль больше не работает ?. на 2.3.7. Сообщение с данными не приходит. Но пользователь создается. 



#24 MRGLONIN

MRGLONIN
  • Пользователь
  • 76 сообщений
  • Дизайн

Опубликовано 23.09.2016 - 10:27

Все работает. Только письмо ушло в спам. Как решить проблему ?



#25 Maksclub

Maksclub
  • Фрилансер
  • 1 398 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 23.09.2016 - 11:14

Все работает. Только письмо ушло в спам. Как решить проблему ?

http://forum.simplac...сторонний-smtp/

http://forum.simplac...ыла-через-stmp/



#26 Skynet

Skynet
  • Пользователь
  • 82 сообщений

Опубликовано 29.11.2016 - 13:49

Всё сделал по инструкции, всё работает кроме одного, после отправки заказа через корзину, пользователь автоматически регистрируется, ему на почту приходит два письма, первое письмо с заказом, второе с данными о регистрации:

 

в тексте письма с регистрационными данными отсутствует e-mail.

версия simpla 2.0

Логин для входа: 
Пароль: 02h6BS9KT5


#27 Skynet

Skynet
  • Пользователь
  • 82 сообщений

Опубликовано 30.11.2016 - 14:44

допустил ошибку, исправил!

 

спасибо огромное за дополнение



#28 Skynet

Skynet
  • Пользователь
  • 82 сообщений

Опубликовано 30.11.2016 - 16:09

Ребята, а как можно добавить проверку на скидку в группе, в которой состоит существующий пользователь?

 

заменил строку

$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('group_id'=>2, 'email'=>$order->email, 'password'=>$password, 'name'=>$order->name, 'enabled'=>'1', 'last_ip'=>$ip));

 

Теперь при автоматической регистрации, пользователь будет добавляться в группу со скидкой.

Но когда пользователь покупает новый товар, но при этом не логинется под своими данными, заказ присваивается к зарегистрированному пользователю, но скидка на товар не учитывается.

Как можно решить данный вопрос?



#29 sergeevizh

sergeevizh
  • Пользователь
  • 190 сообщений
  • Откуда:Москва

Опубликовано 02.03.2017 - 14:59

Действительно, первый вариант был с моими наработками, поэтому на стандартной версии не работал.

Вот рабочий вариант:

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. Логинимся под новым пользователем

 

Я прошу прощения, тут такое дело, пробовал поставить на Okay и почему-то приходит пустое сообщение. Не подскажите как решить эту проблему?



#30 snappk

snappk
  • Пользователь
  • 39 сообщений

Опубликовано 10.12.2018 - 13:50

Добрый день, всем! А как сделать проверку не по почте, перед тем как регистрировать пользователя, а допустим еще по телефону проверять?

Просто появилась проблема. Все что Вы написали работает , НО.

Если пользователь не вводит свою почту, его кидает в группу пользователей, и регистрирует допустим как "Дмитрий" и потом все клиенты, которые сделаю так же заказ, без введения почты, все заказы летят в айди пользователя "Дмитрий". Что нужно сделать что бы правильно работало? Мне достаточно будет и что бы их *не регистрировало-если не введена почта.

Ну *либо как то проверять по телефону, если такой телефон у пользователей зарегистрированных есть, то кидать товары к пользователю, если его нет, то регистрировать по номеру телефона.

Жду ответа, Всем заранее спасибо! Любой вариант подойдет. Нужна помощь. Всем заранее спасибо!


Изменено: snappk, 10.12.2018 - 13:52


#31 snappk

snappk
  • Пользователь
  • 39 сообщений

Опубликовано 28.12.2018 - 11:05

Хоть кто то, отзовитесь. Очень надо решение проблемы. 



#32 ArexMan

ArexMan
  • Пользователь
  • 116 сообщений
  • Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Ukraine

Опубликовано 28.12.2018 - 15:22

Хоть кто то, отзовитесь. Очень надо решение проблемы. 

отозвался, пишите в личку, за деньги сделаю.



#33 shooroop

shooroop
  • Фрилансер
  • 945 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 28.12.2018 - 15:30

Хоть кто то, отзовитесь. Очень надо решение проблемы. 

 

пишите в лс за спасибо поправлю



#34 sergeevizh

sergeevizh
  • Пользователь
  • 190 сообщений
  • Откуда:Москва

Опубликовано 28.12.2018 - 15:36

А можно как-то выложить в открытый доступ дополнение. А то что-то форум дичает, все уходят в личку. Спасибо скажут многие. 



#35 Noxter

Noxter

    Simpla Developer

  • Фрилансер
  • 7 186 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 28.12.2018 - 15:41

А можно как-то выложить в открытый доступ дополнение. А то что-то форум дичает, все уходят в личку. Спасибо скажут многие.

Ну ну!
Придут такие как ты, корс, лухури и обосрут с ног до головы, выкладывай потом что-то на этот гнилой форум.
Имхо обойдёшься!

#36 shooroop

shooroop
  • Фрилансер
  • 945 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 28.12.2018 - 15:44

А можно как-то выложить в открытый доступ дополнение. А то что-то форум дичает, все уходят в личку. Спасибо скажут многие. 

 

там обычная проверка смотри как сделано RegisterView.php



#37 Gruzin

Gruzin
  • Пользователь
  • 442 сообщений
  • Верстка, Пользователь
  • Версия CMS:2.x
  • Откуда:Минск

Опубликовано 28.12.2018 - 16:02

А можно как-то выложить в открытый доступ дополнение. А то что-то форум дичает, все уходят в личку. Спасибо скажут многие. 

Поддерживаю.



#38 phukortsin

phukortsin
  • Фрилансер
  • 913 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 28.12.2018 - 17:20

А можно как-то выложить в открытый доступ дополнение. А то что-то форум дичает, все уходят в личку. Спасибо скажут многие. 

 

Конкретно такую разработку выкладывать на общее обозрение я бы не стал.

1. Сама идея довольно нехорошая - тайком регистрировать покупателя.

2. Вдвойне нехорошая - довольно сомнительным способом приписывать заказы ранее зарегистировавшимся покупателям.

3. А судя по запросам из #30, у того товарища заказ переделан (стандартно без почты заказ не оформляется) - тут надо явно индивидуально работать...

 

Реализовывать бесплатно такой кривой велосипед - себя не уважать.



#39 snappk

snappk
  • Пользователь
  • 39 сообщений

Опубликовано 28.12.2018 - 18:51

Хорошо, если так сложно это реализовать, можно ли дописать, например что бы была проверка, если не введен в данном случае почта, его - клиента не регистрировать. 



#40 phukortsin

phukortsin
  • Фрилансер
  • 913 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 28.12.2018 - 19:14

Конечно, можно. Дописывайте. Примеров масса, в том числе в этой теме...






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых