Проверка товара до добавления его в Корзину
Здравствуйте! Столкнулся с таким вопросом.
У меня при клике на «Добавить» (у товара) всплываем форма для ввода дополнительных данных и уже эта форма добавляет товар в Корзину.
Мне нужно чтобы при клике на «Добавить» проверялись какие есть товары в Корзине и какой товар добавляется (какой шаблон, конкретно в моем случае).
Если я добавляют товар, то понятно, срабатывает miniShop2.Callbacks.add и уже в class msCartHandler, function add и там уже проверять и возвращать что надо.
Но мне нужна проверка товара перед добавлением его в корзину, чтобы показывать форму добавления или нет.
Есть ли что-то вроде miniShop2.Callbacks.status в js Callback'ах или как его сделать самому, а главное потом как это все проверять в какой функции?
Надеюсь понятно объяснил суть вопроса.
Спасибо
У меня при клике на «Добавить» (у товара) всплываем форма для ввода дополнительных данных и уже эта форма добавляет товар в Корзину.
Мне нужно чтобы при клике на «Добавить» проверялись какие есть товары в Корзине и какой товар добавляется (какой шаблон, конкретно в моем случае).
Если я добавляют товар, то понятно, срабатывает miniShop2.Callbacks.add и уже в class msCartHandler, function add и там уже проверять и возвращать что надо.
Но мне нужна проверка товара перед добавлением его в корзину, чтобы показывать форму добавления или нет.
Есть ли что-то вроде miniShop2.Callbacks.status в js Callback'ах или как его сделать самому, а главное потом как это все проверять в какой функции?
Надеюсь понятно объяснил суть вопроса.
Спасибо
Комментарии: 21
Если коротко (а то запутанно мне кажется я описал), то я хочу при нажатии на кнопку проверять асинхронно, что есть в корзине и уже в зависимости от ответа через JS делать определенные действия.
Вот :)
Вот :)
miniShop2.Callbacks.add — это функция добавления твоего колбэка в массив колбэков. Ты можешь добавить свой коллбэк на событие Cart.add.before. И в этом коллбэке ты можешь проверять есть ли в куках id добавляемого товара, если нет записывать. Либо ты можешь слать запрос на сервер и там проверять что есть в корзине.
Мне надо проверять корзину в любой момент когда мне захочется, а не при добавлении в Корзину или Перед добавлением в Корзину. Как это можно сделать?
Я просто не очень понимаю в целом как этим пользоваться. То что описано в доках, про добавление в корзину — ок понятно. Но про статусы или добавление своего чего-то я не нашел.
Вообще не очень понимаю, зачем проверять корзину в рандомный момент, если нужные данные можно сохранить. Но если прям очень надо, то в любой момент можно отправить запрос на сервер, на сервере сделать примерно так
$miniShop2 = $this->modx->getService('miniShop2');
$miniShop2->initialize($this->modx->context->key);
$cart = $miniShop2->cart->get();
А если что-то непонятно, значит не разобрались. Дока по minishop2 очень подробная.
Например нажал на кнопку и проверил статус Корзины, что в ней, сколько всего, какие товары?
Я могу сделать отдельный файл и обращаться к нему, как у вас в примере. Но хочется сделать имеющимися способами.
Я могу сделать отдельный файл и обращаться к нему, как у вас в примере. Но хочется сделать имеющимися способами.
тоже задавался этим вопросом, сходу не получалось найти ответ, как получить корзину через JS например:
есть конечно status, но она работает от данных, не самодостаточная функция
disk.yandex.ru/i/jFxT3R78kIRNQA
miniShop2.Cart.Get()
чтобы получать «все» из session(с учетом безопасности), но обычно всегда делал через запрос к php файлу как выше Артур советовал.есть конечно status, но она работает от данных, не самодостаточная функция
disk.yandex.ru/i/jFxT3R78kIRNQA
У меня полное непонимание видимо как все это работает.
Я же не могу и добавление товара и его проверку повесить на miniShop2.Callbacks.add('Cart.add.ajax.done',... либо мне делать тогда miniShop2.Callbacks.add('Cart.add.before',..., но ведь это все обрабатывается в одном public function add в mscarthandler.class.php
Сделаю я там проверку коризны что в не и т/д, но получается что потом при добавлении опять все будет проверяться? Или в целом так и делают все?
Я же не могу и добавление товара и его проверку повесить на miniShop2.Callbacks.add('Cart.add.ajax.done',... либо мне делать тогда miniShop2.Callbacks.add('Cart.add.before',..., но ведь это все обрабатывается в одном public function add в mscarthandler.class.php
Сделаю я там проверку коризны что в не и т/д, но получается что потом при добавлении опять все будет проверяться? Или в целом так и делают все?
Наверное правильнее будет поставить вопрос, есть ли какой-то Метод в Minishop2 для js, чтобы получить статус Корзины?
/assets/components/minishop2/js/web/default.js — тут я вижу следующее:
/assets/components/minishop2/js/web/default.js — тут я вижу следующее:
miniShop2.Cart = {
...
status: function (status) {
Но как мне к этому обратиться и получить статус корзины через JS?
Даже если бы метод такой был бы в JS, статус корзины не содержит информации о товарах, кроме общего количества.
Это по крайней мере я знаю как исправить. Вопрос в запуске такой вещи.
Без правки исходников этого не исправить)))
Ну почему, я создаю другой файл управления handler.class.php и там делаю как хочу.
Это я и называю править исходники))) Просто это можно делать грамотно, сделать копию, или нет, писать в оригинале.
Приведите пример практического кейса, в котором требуется данный функционал. Какую задачу заказчика вы пытаетесь решить? Мы с ребятами обсудим его и, возможно, добавим такой метод в JS, правда в версию 4.x.x. Благо динамическое обновление корзины уже запланировано.
Один товар нельзя добавить если в корзине есть другой товар.
В админке генерируется событие msOnBeforeAddToCart, там можно сделать проверку, если она не пройдёт верни
$modx->event->output('Сообщение об ошибке');
и товар не будет добавлен, а в JS лови ответ коллбэком на Cart.add.response.error или success надо проверять.
У меня, грубо говоря, есть товар, который перед добавлением его в корзину выводит форму для заполнения данных о пользователе (так сделано, не спрашивайте почему) и это добавляется в Корзину.
А я хочу, чтобы перед тем как я ввел эти данные я смог проверить что в Корзине, чтобы пользователь за зря не вводил данные свои и потом ему выводилось — вы не может добавить этот товар
А я хочу, чтобы перед тем как я ввел эти данные я смог проверить что в Корзине, чтобы пользователь за зря не вводил данные свои и потом ему выводилось — вы не может добавить этот товар
По-моему мнению это сильно выверт сознания одного конкретного заказчика, поэтому тебе не стоит искать встроенных решений, а написать отдельные запрос в отдельный файл.
Действительно не стоит ничего лишнего придумывать, или искать каких-то путей когда ответ на поверхности.
— Нажал на кнопку
— отправил ajax запрос на пхп файл
— проверил в пхп по своим условиям
— вернул ответ, showModal = true/false
ну и далее открывать модалку(или нет) где человек уже вводит данные и далее добавляется товар
— Нажал на кнопку
— отправил ajax запрос на пхп файл
— проверил в пхп по своим условиям
— вернул ответ, showModal = true/false
ну и далее открывать модалку(или нет) где человек уже вводит данные и далее добавляется товар
Видимо так лучше сделать, вы правы.
Спасибо за помощь
Спасибо за помощь
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.