Jump to content

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


Go to solution Solved by SkazZzo4nik,

Recommended Posts

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

 

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

версия simpla 2.0

Логин для входа: 
Пароль: 02h6BS9KT5
Link to post
Share on other sites

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

 

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

$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));

 

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

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

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

Link to post
Share on other sites
  • 3 months later...

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

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

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 и почему-то приходит пустое сообщение. Не подскажите как решить эту проблему?

Link to post
Share on other sites
  • 1 year later...

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

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

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

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

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

Edited by snappk
Link to post
Share on other sites
  • 3 weeks later...

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

Ну ну!

Придут такие как ты, корс, лухури и обосрут с ног до головы, выкладывай потом что-то на этот гнилой форум.

Имхо обойдёшься!

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

 

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

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

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

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

 

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

Link to post
Share on other sites

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

Link to post
Share on other sites
  • 3 months later...

Отличное решение. Использую. А как бы записать эти данные в основную
базу данных и во вторую? Т.е отправить введенные данные и
сгенерированный пароль на этом же хостинге, но в другую базу. Подскажите
плиз.

Link to post
Share on other sites

Как обычно, в соответствии с правилами доступа ко второй базе.

Стандартно в Simpla нет никакой второй базы и соответственно средств для работы с ней.

 

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

 

А вообще-то надо лишний раз задуматься, действительно ли Вам все это надо...

Link to post
Share on other sites

Отличное решение. Использую. А как бы записать эти данные в основную

базу данных и во вторую? Т.е отправить введенные данные и

сгенерированный пароль на этом же хостинге, но в другую базу. Подскажите

плиз.

Другая база или другая таблица?
Link to post
Share on other sites

Другая база. В ней есть таблица. Необходимо чтобы при оформлении товара, как сейчас человек регистрировался автоматически не только на основном сайте, но и в сторонней базе (на том же хостинге).

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...