[РЕШЕНО] Плагин msOnBeforeCreateOrder иногда не срабатывает
Всем привет!
Есть задача: при попытке оформления нового заказа в minishop2, если заказчик уже есть в БД и у него есть хотя бы один заказ, выдавать предупреждение и не оформлять текущий заказ. Казалось бы, достаточно простая задача, был написан плагин на событие msOnBeforeCreateOrder
Что-то не так в коде плагина? Я пытался воспроизвести эту ситуацию — но всё норм, плагин не пропускает повторный заказ моего пользователя.
Есть задача: при попытке оформления нового заказа в minishop2, если заказчик уже есть в БД и у него есть хотя бы один заказ, выдавать предупреждение и не оформлять текущий заказ. Казалось бы, достаточно простая задача, был написан плагин на событие msOnBeforeCreateOrder
<?php
if ($modx->event->name == 'msOnBeforeCreateOrder') {
$arr = $order->get();
$email = str_replace(' ', '', $arr['email']);
$user = $modx->getObject('modUserProfile', ['email' => $email]);
if(is_object($user)) {
$user_id = $user->internalKey;
$orders = $modx->getCollection('msOrder', ['user_id' => $user_id]);
if (count($orders) > 0) {
$modx->event->output('пользователь с email '.$arr['email'].' уже зарегистрирован! Попробуйте ввести другой email');
}
}
}
Плагин срабатывает корректно, но в списке заказов увидел, что у пары пользователей есть более одного заказа. Что-то не так в коде плагина? Я пытался воспроизвести эту ситуацию — но всё норм, плагин не пропускает повторный заказ моего пользователя.
Комментарии: 6
а не проще запретить пользователю вообще делать заказ, убирать ту же кнопку заказать в принципе или корзину?
Не получится — до отправки формы заказа неизвестен email пользователя, по которому происходит проверка
Немного поясню ситуацию. На сайте нужна регистрация пользователя на одном из трех тарифов. То есть вначале выбираем тариф (кладем товар(тариф) в корзину — перед каждым добавлением товара корзина очищается), потом оформляем заказ. В процессе оформления происходит регистрация. Задача в том, что у зареганного юзера уже есть тариф (заказ) и нужно запретить ему менять-добавлять другой тариф.
можно дополнительно на msOnAddToOrder проверять поле email и выдавать ошибку, заодно и кнопку оформления делать не активной
Может пользователи просто хитрят и вместо английской буквы пишут русскую. =) Должно работать.
В итоге, вот ответ: modx.pro/help/20502. Юзеры регались с одним телефоном.
Раньше не сообразил. Спасибо всем за участие!
Раньше не сообразил. Спасибо всем за участие!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.