trace Posted October 26, 2015 Share Posted October 26, 2015 В общем, что имеем:Есть поп-ап окно через которое вводится э-мейл и имя.Задача:При вводе э-мейл и имени, создать учетную запись гостя и автоматически преобразовать ее в клиентскую.Главные вопросы:Как, что, с чем использовать для создания учетной записи гостя?Как, что, с чем использовать для автоматизации перехода из учетной записи гостя в клиента?Буду благодарен за любую более-менее конкретную наводку на алгоритм действий/задач и прочее. Link to comment Share on other sites More sharing options...
Kerm Posted October 26, 2015 Share Posted October 26, 2015 (edited) В общем Вам сначала нужно сделать проверку на 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 October 26, 2015 by Kerm (see edit history) 1 Link to comment Share on other sites More sharing options...
trace Posted October 26, 2015 Author Share Posted October 26, 2015 (edited) В общем Вам сначала нужно сделать проверку на isGuest и isLogged, и сделать для них отдельные правила если возвращается true, а если в обоих случаях false то уже добавить нового клиента. Добавление нового клиента делается через класс Customer: После используем функцию transformToCustomer($id_lang, $password = null); для превращения гостя в клиента. Я вообще нуб в подобного рода занятиях. Я так понял этот код надо добавить в .php-файл модуля, в котором происходит обработка введенного э-мейла? И как сделать проверку на 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'); } Извините, может, для многих это и элементарно, но не могли бы вы чуточку "разжевать" для дилетанта Edited October 27, 2015 by trace (see edit history) Link to comment Share on other sites More sharing options...
Kerm Posted October 27, 2015 Share Posted October 27, 2015 Пишите в скайп, могу помочь платно. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now