[miniShop2] Версия 2.4.15

Новая версия miniShop2 — основное изменение затрагивает работу с пользователем заказа, поле ПОЧТА становится НЕ ОБЯЗАТЕЛЬНЫМ!

В последнее время в моду вошла авторизация по номеру телефона, что потребовало внести коррективы в код магазина.
НЕ ОБНОВЛЯЙТЕ РАБОЧИЕ МАГАЗИНЫ, ПОКА НЕ ПРОЧИТАЕТЕ ЭТУ ЗАМЕТКУ ЦЕЛИКОМ!!!
— поле email
Удалено из обязательных. Если ранее в классе заказа было жестко прописано наличие почты, то теперь нет.
Рабочие магазины где необходимо указание почты — проверяйте наличие поля email в способах доставки.



— метод getCustomerId
Изменен, прежде он возвращал идентификатор пользователя только по почте, теперь и по номеру телефона.
Указание email стало необязательным, можно создать заказ только с указанием номера телефона, либо вообще без телефона и почты. Все зависит от логики вашего магазина и настройки обязательных полей способа доставки.

— события msOnBeforeGetOrderCustomer, msOnGetOrderCustomer
Добавлены события на получение пользователя заказа. Теперь вы можете стоить свою логику по созданию
/ получению пользователя в своем плагине.

Например, если не указана почта запишем заказ на пользователя с идентификатором 1
if ($modx->event->name !== 'msOnBeforeGetOrderCustomer') {
    return;
}

$data = $order->get();
if (empty($data['email'])) {
    $scriptProperties['customer'] = $modx->getObject('modUser', 1);
}

— метод submit
В метод submit заказа добавлена проверка на получение пользователя. Если пользователь не найдет вы получите сообщение об ошибке, создание заказа будет прервано.

— события miniShop
Все события магазина задокументированы docs.modx.pro/components/minishop2/development/events
Надеюсь теперь писать свои плагины будет еще проще.

— Итог
Вообщем теперь создание заказов и авторизация по телефону работают из коробки. Вам нужно лишь обновить магазин до текущей версии.

Так же не забываем про формат номера телефона, вам нужно обеспечить ввод номера в том виде что у вас хранится в БД для корректной авторизации после посредством js, либо например с помощью плагина на событие msOnValidateOrderValue, пример для номера в РФ

<?php
if (!function_exists('check_phone')) {
    function check_phone($phone)
    {
        $phone = preg_replace('#[^0-9]#', '', $phone);
        if (strlen($phone) == 10) {
            $phone = '7' . $phone;
        } else if (strlen($phone) == 11 AND substr($phone, 0, 1) == 8) {
            $phone = '7' . substr($phone, 1);
        }
        if (!is_numeric($phone) || strlen($phone) < 11) {
            return false;
        }

        return $phone;
    }
}

if ($key === 'phone') {
    $modx->event->returnedValues['value'] = check_phone($value);
}

НЕ ОБНОВЛЯЙТЕ РАБОЧИЕ МАГАЗИНЫ, ПОКА НЕ ПРОЧИТАЕТЕ ЭТУ ЗАМЕТКУ ЦЕЛИКОМ!!!
Поле email — удалено из обязательных. Если ранее в классе заказа было жестко прописано наличие почты, то теперь нет. Проверяйте наличие поля email в способах доставки.
Володя
06 августа 2018, 12:42
2
456
+18

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

Андрей Степаненко
06 августа 2018, 12:51
+2
3 дня назад доработал приложение msOneClick для исправления этого недуга.

Не обязательное поле email

Если сделать поле email не обязательным и при отправке поле оказывается пустым, то minishop не даст создать заказа.
Для этого была добавлена дополнительная возможность для автоматической генерации нового email адреса. Либо можно указать свой email адрес на который будут создаваться все заказа.
Андрей
06 августа 2018, 13:23
0
Я правильно понимаю, что теперь можно сделать заказ не создавая пользователя?
    Володя
    06 августа 2018, 13:25
    0
    нет, пользователь в любом случае создается.
      Андрей
      06 августа 2018, 13:29
      0
      Эх жаль, просто на зарубежных сайтах нужна возможность сделать заказ как гость не регистрируя пользователя.
        Володя
        06 августа 2018, 13:33
        +2
        — события msOnBeforeGetOrderCustomer, msOnGetOrderCustomer
        не вижу проблем, создаете пользователя гость и по вашей логике регаете все нужные заказы на него.
          Андрей
          09 августа 2018, 08:33
          0
          Допустим, но почта же берется из пользователя все равно, а не из заказа, для отправки писем о заказе и смене статуса. Т.е. получится что нельзя будет отсылать такому пользователю письмо, если после него еще кто-нибудь как гость заказал? Почта у него перезапишется на другую.
            Володя
            09 августа 2018, 09:59
            0
            Допустим, но почта же берется из пользователя все равно, а не из заказа, для отправки писем о заказе и смене статуса. Т.е. получится что нельзя будет отсылать такому пользователю письмо, если после него еще кто-нибудь как гость заказал?
            ну наверно тогда вам все же стоит регать пользователя и использовать штатный механизм оповещения.
            Либо строить свой механизм оповещений изменив например метод changeOrderStatus.
Наумов Алексей
06 августа 2018, 13:45
0
Формат телефона 79990000000 строго обязателен? Что для зарубежных пользователей?
    Володя
    06 августа 2018, 13:52
    0
    нет, конечно. Данный случай описан для магазина в РФ. Главное привести номер к единому виду.
    Поправил в заметке, спасибо!
Алексей Бгатов
06 августа 2018, 14:18
0
Все события магазина задокументированы
хорошо бы еще документацию касательно работы с returnedValues
Boris Akimenko
06 августа 2018, 19:03
+2
Спасибо, Ребята!
Отличная работа!
    Володя
    07 августа 2018, 08:17
    +1
    Пожалуйста!
Дмитрий
11 августа 2018, 22:13
0
Могло ли обновление как-то нарушить работу с thumbnails?
В источнике файлов есть строка «catalog»:{«w»:480,«h»:612,«q»:95,«far»:«1»,«bg»:«ffffff»}
При выводе каталога через tpl.msProducts.cell изображения выводятся через {$catalog}. Ранее все нормально работало, сейчас в $catalog — пустая строка. Если ставить $thumb, то фото выводятся.
Логи пустые.
    Володя
    12 августа 2018, 08:32
    0
    нет
      Дмитрий
      12 августа 2018, 20:41
      0
      Спасибо, разобрался.
      Почему-то ранее msProduct выводил изображения без указания &includeThumbs=`...` (чего быть не должно по документации). Как поставил &includeThumbs — все заработало.
        Алексей Суслов
        Вчера в 14:26
        0
        Скорей всего у вас были изменены параметры сниппета по умолчанию, после обновления они затерлись.
        Можете изменить снова и тогда будет опять без параметра по умолчанию работать.