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

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

— метод getCustomerId
Изменен, прежде он возвращал идентификатор пользователя только по почте, теперь и по номеру телефона.
Указание email стало необязательным, можно создать заказ только с указанием номера телефона, либо вообще без телефона и почты. Все зависит от логики вашего магазина и настройки обязательных полей способа доставки.
— события msOnBeforeGetOrderCustomer, msOnGetOrderCustomer
Добавлены события на получение пользователя заказа. Теперь вы можете стоить свою логику по созданию
/ получению пользователя в своем плагине.
Например, если не указана почта запишем заказ на пользователя с идентификатором 1
— метод submit
В метод submit заказа добавлена проверка на получение пользователя. Если пользователь не найдет вы получите сообщение об ошибке, создание заказа будет прервано.
— события miniShop
Все события магазина задокументированы docs.modx.pro/components/minishop2/development/events
Надеюсь теперь писать свои плагины будет еще проще.
— Итог
Вообщем теперь создание заказов и авторизация по телефону работают из коробки. Вам нужно лишь обновить магазин до текущей версии.
Так же не забываем про формат номера телефона, вам нужно обеспечить ввод номера в том виде что у вас хранится в БД для корректной авторизации после посредством js, либо например с помощью плагина на событие msOnValidateOrderValue, пример для номера в РФ
НЕ ОБНОВЛЯЙТЕ РАБОЧИЕ МАГАЗИНЫ, ПОКА НЕ ПРОЧИТАЕТЕ ЭТУ ЗАМЕТКУ ЦЕЛИКОМ!!!
Поле email — удалено из обязательных. Если ранее в классе заказа было жестко прописано наличие почты, то теперь нет. Проверяйте наличие поля email в способах доставки.

В последнее время в моду вошла авторизация по номеру телефона, что потребовало внести коррективы в код магазина.
НЕ ОБНОВЛЯЙТЕ РАБОЧИЕ МАГАЗИНЫ, ПОКА НЕ ПРОЧИТАЕТЕ ЭТУ ЗАМЕТКУ ЦЕЛИКОМ!!!
— поле 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 в способах доставки.
Комментарии: 22
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Либо строить свой механизм оповещений изменив например метод changeOrderStatus.
Поправил в заметке, спасибо!
?
Отличная работа!
В источнике файлов есть строка «catalog»:{«w»:480,«h»:612,«q»:95,«far»:«1»,«bg»:«ffffff»}
При выводе каталога через tpl.msProducts.cell изображения выводятся через {$catalog}. Ранее все нормально работало, сейчас в $catalog — пустая строка. Если ставить $thumb, то фото выводятся.
Логи пустые.
Почему-то ранее msProduct выводил изображения без указания &includeThumbs=`...` (чего быть не должно по документации). Как поставил &includeThumbs — все заработало.
Можете изменить снова и тогда будет опять без параметра по умолчанию работать.
Но! При создании нового заказа с тем же именем (receiver), но другим номером телефона, новый пользователь не создаётся, а заказ присваивается на предыдущего пользователя!
К тому же, поскольку у пользователя есть email, то система пытается его отправить. На несуществующий email собственного домена.
Безвозвратно очищается корзина при выходе из личного кабинета
P.S.
И не Володя тоже.
В плагине объект пользователя точно есть, а в классе минишопа, после вызова события — пусто.
Где-то тут github.com/Ibochkarev/miniShop2/blob/master/core/components/minishop2/model/minishop2/minishop2.class.php#L657 разве не должно быть: