[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 в способах доставки.
— метод 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
3 дня назад доработал приложение msOneClick для исправления этого недуга.
Не обязательное поле email
Если сделать поле email не обязательным и при отправке поле оказывается пустым, то minishop не даст создать заказа.
Для этого была добавлена дополнительная возможность для автоматической генерации нового email адреса. Либо можно указать свой email адрес на который будут создаваться все заказа.
Я правильно понимаю, что теперь можно сделать заказ не создавая пользователя?
нет, пользователь в любом случае создается.
Эх жаль, просто на зарубежных сайтах нужна возможность сделать заказ как гость не регистрируя пользователя.
— события msOnBeforeGetOrderCustomer, msOnGetOrderCustomerне вижу проблем, создаете пользователя гость и по вашей логике регаете все нужные заказы на него.
Допустим, но почта же берется из пользователя все равно, а не из заказа, для отправки писем о заказе и смене статуса. Т.е. получится что нельзя будет отсылать такому пользователю письмо, если после него еще кто-нибудь как гость заказал? Почта у него перезапишется на другую.
Допустим, но почта же берется из пользователя все равно, а не из заказа, для отправки писем о заказе и смене статуса. Т.е. получится что нельзя будет отсылать такому пользователю письмо, если после него еще кто-нибудь как гость заказал?ну наверно тогда вам все же стоит регать пользователя и использовать штатный механизм оповещения.
Либо строить свой механизм оповещений изменив например метод changeOrderStatus.
Формат телефона 79990000000 строго обязателен? Что для зарубежных пользователей?
нет, конечно. Данный случай описан для магазина в РФ. Главное привести номер к единому виду.
Поправил в заметке, спасибо!
Поправил в заметке, спасибо!
Все события магазина задокументированыхорошо бы еще документацию касательно работы с returnedValues
Вроде же
$modx->event->returnedValues = $scriptProperties;
?
нет
Спасибо, Ребята!
Отличная работа!
Отличная работа!
Пожалуйста!
Могло ли обновление как-то нарушить работу с thumbnails?
В источнике файлов есть строка «catalog»:{«w»:480,«h»:612,«q»:95,«far»:«1»,«bg»:«ffffff»}
При выводе каталога через tpl.msProducts.cell изображения выводятся через {$catalog}. Ранее все нормально работало, сейчас в $catalog — пустая строка. Если ставить $thumb, то фото выводятся.
Логи пустые.
В источнике файлов есть строка «catalog»:{«w»:480,«h»:612,«q»:95,«far»:«1»,«bg»:«ffffff»}
При выводе каталога через tpl.msProducts.cell изображения выводятся через {$catalog}. Ранее все нормально работало, сейчас в $catalog — пустая строка. Если ставить $thumb, то фото выводятся.
Логи пустые.
нет
Спасибо, разобрался.
Почему-то ранее msProduct выводил изображения без указания &includeThumbs=`...` (чего быть не должно по документации). Как поставил &includeThumbs — все заработало.
Почему-то ранее msProduct выводил изображения без указания &includeThumbs=`...` (чего быть не должно по документации). Как поставил &includeThumbs — все заработало.
Правильно ли я понимаю, что без указания email теперь создаётся пользователем с email в формате receiver@domain.ru, где receiver — введенное имя пользователя, а domain.ru — домен сайта. И в этого пользователя записывается номер телефона в поле mobilephone.
Но! При создании нового заказа с тем же именем (receiver), но другим номером телефона, новый пользователь не создаётся, а заказ присваивается на предыдущего пользователя!
К тому же, поскольку у пользователя есть email, то система пытается его отправить. На несуществующий email собственного домена.
Но! При создании нового заказа с тем же именем (receiver), но другим номером телефона, новый пользователь не создаётся, а заказ присваивается на предыдущего пользователя!
К тому же, поскольку у пользователя есть email, то система пытается его отправить. На несуществующий email собственного домена.
Странно работает валидация как-то. В методе validate() сначала вызывается событие msOnBeforeValidateOrderValue, потом идёт встроенная в метод валидация полученного из события значения, далее вызывается событие msOnValidateOrderValue с новым (после валидации) значением, старое значение, до встроенной в метод валидации в это событие не передаётся, т.е. значение поля телефон, например, всегда будет обрезаться до 15 символов.
Володя, пожалуйста, помогите.
Безвозвратно очищается корзина при выходе из личного кабинета
P.S.
И не Володя тоже.
Безвозвратно очищается корзина при выходе из личного кабинета
P.S.
И не Володя тоже.
@Володя Что-то ни в какую не получается передать customer через плагин на событие msOnBeforeGetOrderCustomer. Оба способа не работают:
Где-то тут github.com/Ibochkarev/miniShop2/blob/master/core/components/minishop2/model/minishop2/minishop2.class.php#L657 разве не должно быть:
$scriptProperties['customer'] = $modx->getObject('modUser', 1);
$modx->event->returnedValues['customer'] = $modx->getObject('modUser', 1);
В плагине объект пользователя точно есть, а в классе минишопа, после вызова события — пусто.Где-то тут github.com/Ibochkarev/miniShop2/blob/master/core/components/minishop2/model/minishop2/minishop2.class.php#L657 разве не должно быть:
$customer = $response['customer']
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.