Как сделать необязательным поле email в miniShop2?

Всем привет!

Я уже несколько раз использовал miniShop2 в своих сайтах, но сейчас первый раз использую корзину и оформление заказа.

Столкнулся с тем, что заказ привязывается к пользователю MODx, привязывание идет по email (это делает метод getCustomerId в основном классе miniShop).

А у меня магазин специфичный, заказы редкие, у половины клиентов нет email, это вообще не обязательное поле.

Я сейчас сижу и думаю, в принципе меня наверное устроило бы изменить механизм работы метода getCustomerId, что бы он пользователя генерил не по email, а каждый раз просто нового, в качестве логина используя к примеру текущее время.

Как красиво сделать email необязательным полем? Без правки исходников.
Наумов Алексей
04 июля 2013, 05:55
modx.pro
5
6 706
0

Комментарии: 21

Василий Наумкин
04 июля 2013, 11:02
0
Не знаю. Наверное, только так.
    Василий Наумкин
    04 июля 2013, 11:06
    0
    И сразу второй вариант: генерируй случайный email и вставляй в заказ плагином при его создании. Каждый раз будет новый юзер.

    Ну и учти, что сегодня-завтра выйдет личный кабинет для покупателей MS2 — там тоже все через email. Можно будет установить на любой существующий магазин, и любой покупатель сможет войти и посмотреть свои старые заказы.

    Юзеры со случайными email такой возможности иметь не будут.
      Наумов Алексей
      04 июля 2013, 14:41
      0
      Спасибо!

      В целом я уже решил вопрос. Я отнаследовался от msOrderHandler, скопировал в мой класс метод submit, убрал в нем из обязательных полей email, и перенес модернизированную функцию getCustomerId в него же.

      НУ а магазины бывают разные, товары специфические. У меня например 1 пользователь с вероятностью 99,99% совершит только 1 покупку.
        Артём Баскаков
        06 января 2014, 14:05
        0
        Алексей, столкнулся с такой же проблемой. Можно поподробнее о том как вы изменили класс submit и в каком сниппете меняли инициализацию расширенного класса?
          Александр Котлов
          06 января 2014, 15:30
          0
          Зачем такие сложные телодвижения, если можно сделать емейл скрытым, и в value написать "[[!time]]@zxzx.com", а в time —
          return time();
            Артём Баскаков
            07 января 2014, 12:11
            0
            можно сделать и так, как вариант. Но хотелось бы сделать нормально через наследование, т.к. мне, помимо того, что надо сделать мыло необязательным полем, надо телефон сделать обязательным.
        kudesia
        30 января 2023, 18:06
        0
        В таком случае, заказы будут отправляться на случайные несуществующие адреса, а хостинг за это заблокирует отправку писем с сайта, приняв за спам-рассылку.
      Evgeny Epifanov
      21 марта 2014, 22:47
      0
      Ребята, Василий подскажите пожалуйста (может есть у кого готовое решение) как отключить проверку? Хочет человек укажет почту, не хочет ну и не надо. У меня товары, которые бывает и бабушки покупают. Не смотря на то, что они умеют пользоваться интернетом, они почему-то не пользуются электропочтой.
      Василий, очень прошу, помоги отключить обязательную проверку почту. Я посмотрел и minishop2.class.php, и msorderhandler.class.php, но для меня это все пока очень сложно.
        Наумов Алексей
        22 марта 2014, 08:54
        4
        0
        Привет. Вот смотри:
        1. В системной настройке ms2_order_handler_class указываем myOrderHandler
        2. Создаем файл core/components/minishop2/custom/order/myOrderHandler.class.php
        3. В него код:
        <?
        class myOrderHandler extends msOrderHandler{	
        	public function submit($data = array()) {
        		if(empty($data['email'])){
        			$data['email'] = uniqid('user_').'@MYSITE.ru';
        		}
        		return parent::submit($data);
        	}
        }
        Это один из вариантов. Мы просто при отправке заказа, если пользователь не указал почту, генерируем случайный email.

        Можешь посмотреть исходный msOrderHandler и переопределить в нем другой метод, например, где идет проверка email.
          Evgeny Epifanov
          22 марта 2014, 14:38
          0
          Спасибо большое, Алексей!
          То, что нужно.
            Юрий Фомин
            11 февраля 2015, 20:37
            0
            К сожалению не выходит. Ломается работа минишопа, ни одна кнопка отрпавки данных, будь то из каталога, карточки или же корзины, не работает. Уже об отправке формы и речь не идет. Может связанно с обновлением минишопа, времени то прошло не мало, а вопрос актуален.
              Пашок
              Пашок
              11 февраля 2015, 22:28
              0
              «Александр Котлов» нормальный вариант предложил. Это как-бы тоже самое.

              А сейчас да, насколько я понял, этот вариант, под которым вы отписались — не актуален.
                Пашок
                Пашок
                11 февраля 2015, 22:38
                0
                Хотя я проверил — всё работает с этим кодом. Мож чёт не так делаешь?)
                  Юрий Фомин
                  12 февраля 2015, 17:36
                  0
                  Пашок, спасибо за ответ. Если бы здесь было чаво делать? да и проверил не один (почти десяток) раз. ФОкус в том что ломается работа не только форм, всего минишопа.
                    Dolce
                    27 июля 2017, 14:21
                    0
                    Здравствуйте. У меня тоже все ломается после того как я прописал класс обработчика myOrderHandler. У вас получилось решить этот момент?
                Raimei
                20 февраля 2017, 02:10
                0
                Возможно ли сделать проверку на определенный метод доставки?
                  kudesia
                  30 января 2023, 18:06
                  0
                  Можно в этой конструкции

                  <?
                  class myOrderHandler extends msOrderHandler{	
                  	public function submit($data = array()) {
                  		if(empty($data['email'])){
                  			$data['email'] = uniqid('user_').'@MYSITE.ru';
                  		}
                  		return parent::submit($data);
                  	}
                  }
                  как-то оставить поле email незаполненным при оформлении заказа?
                Владимир
                13 ноября 2017, 18:42
                0
                Может кто-нибудь уже придумал нормальный способ отключения обязательного поля Email?
                  Михаил
                  31 августа 2018, 14:29
                  0
                  Добавить скрытое поле с заданным email'ом:
                  <input id="email" placeholder="Email" name="email" value="ya@ya.ru" class="form-control required" type="hidden">
                    Андрей
                    31 августа 2018, 14:46
                    0
                    В последней версии уже есть из коробки — [miniShop2] Версия 2.4.15.

                    Новая версия miniShop2 — основное изменение затрагивает работу с пользователем заказа, поле ПОЧТА становится НЕ ОБЯЗАТЕЛЬНЫМ!
                      kudesia
                      31 января 2023, 08:26
                      0
                      Да, поле необязательно. Но создается автоматом фейковый email, на который безуспешно отправляется заказ, что приводит к блокировке по спаму.
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  21