Jump to content

Регистрация гостя и автоматическое преобразование в клиента


Recommended Posts

В общем, что имеем:
Есть поп-ап окно через которое вводится э-мейл и имя.

Задача:
При вводе э-мейл и имени, создать учетную запись гостя и автоматически преобразовать ее в клиентскую.

Главные вопросы:
Как, что, с чем использовать для создания учетной записи гостя?
Как, что, с чем использовать для автоматизации перехода из учетной записи гостя в клиента?


Буду благодарен за любую более-менее конкретную наводку на алгоритм действий/задач и прочее.

 

xF2V57O.png

Link to comment
Share on other sites

В общем Вам сначала нужно сделать проверку на isGuest и isLogged, и сделать для них отдельные правила если возвращается true, а если в обоих случаях false то уже добавить нового клиента. Добавление нового клиента делается через класс Customer:

 

$customer = new Customer();
$customer->email = $email; // сюда передаем email из формы
$customer->firstname = $firstname; // сюда передаем имя из формы
$customer->logged = 1; // автоматически авторизуем клиента

// В общем это все дело нужно сохранить.
После используем функцию transformToCustomer($id_lang, $password = null); для превращения гостя в клиента.

 

В общем смотрите AuthController.php и делайте по аналогии.

Edited by Kerm (see edit history)
  • Like 1
Link to comment
Share on other sites

В общем Вам сначала нужно сделать проверку на isGuest и isLogged, и сделать для них отдельные правила если возвращается true, а если в обоих случаях false то уже добавить нового клиента. Добавление нового клиента делается через класс Customer:

После используем функцию transformToCustomer($id_lang, $password = null); для превращения гостя в клиента.

Я вообще нуб в подобного рода занятиях. :mellow:

Я так понял этот код надо добавить в .php-файл модуля, в котором происходит обработка введенного э-мейла? :unsure:

И как сделать проверку на isGuest и isLogged? 

Кстати, вот еще нашел строку подписки на рассылку при создании клиента:

 

  $customer->newsletter = 1;
Вот код transformToCustomer:

 

 

	public function transformToCustomer($id_lang, $password = null)
	{
		if (!$this->isGuest())
			return false;
		if (empty($password))
			$password = Tools::passwdGen(8, 'RANDOM');
		if (!Validate::isPasswd($password))
			return false;

		$this->is_guest = 0;
		$this->passwd = Tools::encrypt($password);
		$this->cleanGroups();
		$this->addGroups(array(Configuration::get('PS_CUSTOMER_GROUP'))); // add default customer group
		if ($this->update())
		{
			$vars = array(
				'{firstname}' => $this->firstname,
				'{lastname}' => $this->lastname,
				'{email}' => $this->email,
				'{passwd}' => $password
			);

			Mail::Send(
				(int)$id_lang,
				'guest_to_customer',
				Mail::l('Your guest account has been transformed into a customer account', (int)$id_lang),
				$vars,
				$this->email,
				$this->firstname.' '.$this->lastname,
				null,
				null,
				null,
				null,
				_PS_MAIL_DIR_,
				false,
				(int)$this->id_shop
			);
			return true;
		}
		return false;
	}

 

 

Код модуля:

 

 

<?php

include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'../../../init.php');
include(dirname(__FILE__).'/subscriber.php');

$subscriber = new Subscriber();
global $smarty, $cookie, $cart;
ini_set('display_errors', 'on');

if (Tools::getValue('submitC'))
{
$cookie->n = 1;
die();
}
if (Tools::isSubmit('submitB'))
{
	$errors = array();

	if (Configuration::get('PS_TOKEN_ENABLE') AND strcmp(Tools::getToken(false), Tools::getValue('token')))
		$errors[] = 'Ошибка. Перезагрузите страницу';
	if (!Tools::getValue('email') || !Validate::isEmail(Tools::getValue('email')))
		$errors[] = 'Неверный формат E-mail';

	if (sizeof($errors))
	{
		$return = array(
			'hasError' => !empty($errors), 
			'errors' => $errors
		);

		die(Tools::jsonEncode($return));
	}
	else
	{
		$discountName = 'BT-'.Tools::strtoupper(substr(md5(Tools::getValue('email')), 15));
		if ($discountName AND Validate::isDiscountName($discountName) AND !Discount::discountExists($discountName))
		{
			$voucher = new Discount();
			$voucher->name[$cookie->id_lang] = Configuration::get('SUBSCRIBER_DESC');
			$voucher->id_discount_type = 1;
			$voucher->quantity = 1;
			$voucher->quantity_per_user = 1;
			$voucher->cumulable_reduction = 1;

			$voucher->cart_display = 0;
			$voucher->id_currency = (int)$cookie->id_currency;
			$voucher->description = Configuration::get('SUBSCRIBER_DESC');
			$now = time();
			$voucher->date_from = date('Y-m-d H:i:s', $now);
			$voucher->date_to = date('Y-m-d H:i:s', $now + (3600 * 24 * Configuration::get('SUBSCRIBER_DAY')));
			$voucher->value = Configuration::get('SUBSCRIBER_DISCOUNT');
			$voucher->code = $discountName;

			if ($voucher->add())
			{
				$data = array(
					'{shop_name}' => Configuration::get('PS_SHOP_NAME'),
					'{email}' => Tools::getValue('email'),
					'{dname}' => $discountName
				);
        $cookie->n = 1;
				Mail::Send(Configuration::get('PS_LANG_DEFAULT'), 'subscriber', 'Ваш купон на скидку', $data, Tools::getValue('email'), NULL, strval(Configuration::get('PS_SHOP_EMAIL')), strval(Configuration::get('PS_SHOP_NAME')), NULL, NULL, dirname(__FILE__).'/mails/');

				die(true);
			}
		}
		die();
	}
}
else
{
	$smarty->assign('SUBSCRIBER_DISCOUNT', Configuration::get('SUBSCRIBER_DISCOUNT'));
	$smarty->display(dirname(__FILE__).'/subscriber.tpl');
}

 

Извините, может, для многих это и элементарно, но не могли бы вы чуточку "разжевать" для дилетанта  :blush:

Edited by trace (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...