Перейти к содержанию
Официальный форум поддержки Simpla

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


Перейти к решению Решено SkazZzo4nik,

Рекомендуемые сообщения

Возникла необходимость сделать автоматическую регистрацию.

На 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;
  		  }
  		}

 

Ссылка на сообщение
Поделиться на другие сайты

На стандартной 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));
    		  
Ссылка на сообщение
Поделиться на другие сайты

У меня выдает ошибку :

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.'>');
	}
Изменено пользователем SkazZzo4nik
Ссылка на сообщение
Поделиться на другие сайты
  • Решение

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...

Это офигенная штука!

А как сделать чтобы поле "телефон" из корзины, тоже добавлялся в личный кабинет ?

 

добавить поле 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));
Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

Спасибо участникам за такую замечательную идею и бесплатную реализацию!

 

Можно ли пароль не генерировать, а брать номер телефона в качестве пароля? Только для новых пользователей

Ссылка на сообщение
Поделиться на другие сайты

Спасибо участникам за такую замечательную идею и бесплатную реализацию!

 

Можно ли пароль не генерировать, а брать номер телефона в качестве пароля? Только для новых пользователей

 

замените это:

    		  $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; 
    		  $max=10; 
    		  $size=StrLen($chars)-1; 
    		  $password=null; 
    		  while($max--) $password.=$chars[rand(0,$size)]; 

на 

$password=$order->phone;

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

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

замените это:

    		  $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 цифр с конца

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

Подскажите, приходит письмо в странной кодировке.

Вот так �� ������� ���� ���������������� �� �

Ссылка на сообщение
Поделиться на другие сайты
  • 2 месяца спустя...

замените это:

    		  $chars="qazxswedcvfrtgbnhyujmkiolp1234567890QAZXSWEDCVFRTGBNHYUJMKIOLP"; 
    		  $max=10; 
    		  $size=StrLen($chars)-1; 
    		  $password=null; 
    		  while($max--) $password.=$chars[rand(0,$size)]; 

на 

$password=$order->phone;

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

не понял? стандартно пользователь вводит сам пароль, при регистрации, поэтому ему не отправляет этот пароль на почту. или о чем речь?

Ссылка на сообщение
Поделиться на другие сайты

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

Уже давно есть готовое решение по этому вопросу.
Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...
  • 8 месяцев спустя...

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...