Всего 123 792 комментария

Артур Шевченко
21 февраля 2023, 10:43
0
Я посмотрел документацию, и ничего про валидацию не нашёл, поэтому думается мне вам надо самому написать проверку. Вообще, моё скромное мнение таково, что Office бессмысленная трата денег. Есть достаточное количество бесплатных способов сделать тоже самое, самый простой это AjaxFormitLogin. Историю заказов он конечно не покажет, но для этого можно использовать msListOrders, который втрое дешевле Office, имеет много вариантов работы с заказами и лёгок в кастомизации, при том что в Office вы получаете таблицу с ExtJs.
m4
m4
20 февраля 2023, 23:34
0
Пробовал. Результат такой же. В итоге просто всё в один файл поместил.

Может еще modx устарел, год не обновлялся.
Артур Шевченко
20 февраля 2023, 23:14
0
Можно, надо проверить есть ли эта опция в таблице ms2_category_options.
Konstantin
20 февраля 2023, 23:07
0
Не обижайте Андрюху, товарищи.
Konstantin
20 февраля 2023, 23:05
0
помогло, спасибо
Тодор
20 февраля 2023, 22:25
0
Если не поможет, то подключи свой сервис cart по етой инструкции, и измени там add() или если тебе надо именно при изменни количества, то меняй change()
Тодор
20 февраля 2023, 22:16
0
Пробуй так:
<?php
$minimal = 5;
switch ($modx->event->name) {
    case 'msOnBeforeChangeInCart':
        $count = &$modx->event->params['count'];
        if ($minimal > 1 && $count < $minimal) {
            $count = $minimal;
        }
        $modx->event->returnedValues['count'] = $count;
        break;
}
Артур Шевченко
20 февраля 2023, 18:04
0
Ну вот у меня всё что возвращает submit() сразу на фронт улетает, а весь код в хуке после submit() почему-то не работает. При этом если поменять echo на return, то всё норм. Может я что-то не так делал, может что-то не так в AjaxFormitLogin, я не знаю. Надо ещё раз проверить.
Николай Савин
20 февраля 2023, 17:39
0
Ну перед die же echo json_encode
Ответ гарантированно должен быть и проверенно работает
Артур Шевченко
20 февраля 2023, 17:32
0
ХЗ, я думал из-за die(). Проверь на досуге где косяк.
Николай Савин
20 февраля 2023, 17:25
0
Почему не выполняется? Должен возвращаться $response, в случае если включен json_response и существует метод оплаты. Я прекрасно реализую ecoomerce методы ПОСЛЕ submit
Артур Шевченко
20 февраля 2023, 17:16
0
Ну не знаю. Факт в том, что в моём варианте с minishop2 >4.0.0 код после $miniShop2->order->submit() не выполняется.
Денис Усачев
20 февраля 2023, 17:02
0
может кому будет полезно: конструкция посредством Fenom

{set $baza_filter = $_modx->resource.baza_filter[0]}
{set $baza_color = $_modx->resource.color_filter[0]}
'optionFilters' => ' { "baza_filter":"'~ $baza_filter ~'" , "color_filter":"'~ $baza_color ~'"  } ' ,
Тодор
20 февраля 2023, 16:38
0
Я использу вот такой снипет для отладки ответов после submit():
<?php
$formFields = $hook->getValues();
$count = (float) $formFields['count'];
$id = (int) $formFields['id'];
if($id <= 0){
    $hook->addError( 'id', "Неправильное ID товара" );
    return false;
}
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->initialize($modx->context->key, array(
        'json_response' => true,
        'max_count' => 1000,
        'allow_deleted' => false,
        'allow_unpublished' => false
    ));
    $tmp = $miniShop2->cart->get();
    $miniShop2->cart->clean();
    $miniShop2->cart->add( $id, $count, $formFields['options']);
    $miniShop2->order->add( 'receiver', $formFields['receiver'] );
    $miniShop2->order->add( 'email', $formFields['email'] );
    $miniShop2->order->add( 'delivery', $formFields['delivery']); // id метода доставки
    $miniShop2->order->add( 'payment', $formFields['payment']); // id метода оплаты
    if($response = $miniShop2->order->submit()){
        if($response['success'] != 1){
            $response = json_decode($response, 1);
            $hook->addError('receiver', $response['message']);
            if(!empty($response['data'])){
                foreach($response['data'] as $field){
                    $hook->addError($field, $response['message']);
                }
            }
            return false;
        }
        $miniShop2->cart->set($tmp);
        return true; // Успешное оформление заказа
    }else{
        $hook->addError('receiver', 'Ошибка при оформлении заказа');
        return false;
    }
}else{
    $hook->addError("receiver", "Проблема инициализации магазина");
    return false;
}
Артур Шевченко
20 февраля 2023, 15:40
0
Всё верно, корзину надо очищать перед оформлением, а вот вернуть то состояние которое было не выйдет, так как после выполнения метода submit() никакой код не выполнится.
Тодор
20 февраля 2023, 15:20
+1
Если не ошибаюсь, то етот код добавит в уже существующе корзину товар, после чего оформляет заказ. Но заказ в 1 клик ето покупка только поточного товара. По етомо после инициализации минишопа я бы еще добавил:
$tmp = $ms2->cart->get();
$ms2->cart->clean();
а после оформления заказа, вернуть назад прежнее содержимое корзини
$ms2->cart->set($tmp);
Prihod
20 февраля 2023, 14:53
0
Скинь в личном сообщении доступ в админку, так же скрин что ты вводишь
Тодор
20 февраля 2023, 12:14
0
Добрий день! После выбора области и населеного пунтка, если оставлять поле «Отделение» пустым, и нажать на карту, то открывается ПУСТАЯ карта, без отделении. На демо видео показано что там уже дожны подтягиватся отделения. Если уже выбрать отделение и потом открыть карту — то там уже есть отделения.
И вторая проблема ето то что в селах не подтягиваються названия улиц для — Доставки курером.
Stepan
19 февраля 2023, 17:57
0
Алексей, в карточке товара я бы сбрасывал количество после добавления