Вход • Регистрация

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

  • 31 августа 2015 г.
  • Можно ли каким то более-менее «малокровным» образом объединить заказ с регистрацией?
    Хочется минимизировать действия нового пользователя при заказе, но не хочется терять возможность накопительных скидок.

    Оптимальным вариантом была бы отправка на почту сгенерированного пароля, но тут разумеется «не до жиру» : )
    • 31 августа 2015 г.
    • А чего "не до жиру"? Ничего страшного же
      Регистрация пользователя в modules/registration/registration.action.php
      Там простой участок в функции add():
      группа валидаций, затем простое добавление в таблицу users:
      Код
      $save_id = DB::query("INSERT INTO {users} (name, password, mail, phone, created, lang_id, fio, act, role_id)"
      . " VALUES ('%h', '%h', '%h', '%h', %d, %d, '%h', '%d', %d)",
      $_POST["name"], encrypt($_POST["password"]), $_POST["mail"], (!empty($_POST["phone"]) ? $phone : ''), time(),
      _LANG, $_POST["fio"], $this->diafan->configmodules("act", "users") ? 0 : 1,
      $role_id
      );

      и чуть ниже добавление этого нового пользователя по его свежему $save_id в подписки по мылу и телефону:

      Код
      if(in_array('subscribtion', $this->diafan->installed_modules))
      {
      if(! empty($_POST['subscribe']) || ! $this->diafan->configmodules('subscribe_in_registration', 'subscribtion'))
      {
      $email_id = DB::query_result("SELECT id FROM {subscribtion_emails} WHERE mail='%s' LIMIT 1", $_POST['mail']);
      if($email_id)
      {
      DB::query("UPDATE {subscribtion_emails} SET act='1', trash='0' WHERE id=%d LIMIT 1", $email_id);
      }
      else
      {
      $code = md5(rand(111, 99999));
      DB::query("INSERT INTO {subscribtion_emails} (created, mail, name, code, act) VALUES (%d, '%s', '%h', '%s', '1')", time(), $_POST['mail'], $_POST["fio"], $code);
      }
      }
      if($_POST["phone"])
      {
      $phone = preg_replace('/[^0-9]+/', '', $_POST["phone"]);
      if(! DB::query_result("SELECT id FROM {subscribtion_phones} WHERE phone='%s' AND trash='0'", $phone))
      {
      DB::query("INSERT INTO {subscribtion_phones} (phone, created, name, act) VALUES ('%s', %d, '%h', '1')", $phone, time(), $_POST["fio"]);
      }
      }
      }



      Сам заказ оформляется в modules/cart/cart.action.php в функции order()
      Там тоже хорошо видно простые запросы в таблицу
      Код
      INSERT INTO {shop_order}...


      Вот перед этими запросами просто сделайте регистрацию пользователя и все.
      Вместо encrypt($_POST["password"]) при регистрации пользователя, для генерации пароля используйте конструкцию типа
      Код
      $password=substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',5)),0,5);


      Ну и в
      Код
      $this->send_mails($order_id, $params, $payment);

      не забудьте добавить типа
      $payment .= "<br>Для вас создан аккаунт, вход по емайлу, пароль: ".$password.
      • 19 апреля 2018 г.
      • Что-то "лыжи не едут"... Нужна помощь.

        Понимаю, что тема старая, но возникла необходимость именно так оформить регистрацию.

        Нашла файлы modules/registration/registration.action.php и modules/cart/cart.action.php

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

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

        Может быть кто-то делал и знает, куда что вставлять? А то по инструкции Виталия у меня не получается.

        П.С. Движок стандартный, версия примерно месячной давности, сайт не боевой - тестовый.


        И вот это не поняла как вставить. Может поэтому и не происходит ничего
        Цитата
        Вместо encrypt($_POST["password"]) при регистрации пользователя, для генерации пароля используйте конструкцию типа
        Код
        $password=substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',5)),0,5);
        • 19 апреля 2018 г.
          • 19 апреля 2018 г.
          • Интересно. Спасибо.

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

            П.С. Если не разберусь сама, то обращусь к вам. Или, может, лучше клиента к вам перенаправить? Сможете ему сами это дополнение впилить?
            • 19 апреля 2018 г.
            • Для Вас, всё что угодно!

              Можете даже копию сайта сделать и вместе всё попробуем и проверим ;)
  • 31 августа 2015 г.
  • Спасибо пригодится))
    А если не делать запрос на e-mail то возможно делать регистрацию допустим по номеру телефона?

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум