Сделать заказ в minishop2

Добрый день. Не могу разобраться как сделать заказ что бы он появился в заказах в minishop2. Пытаюсь реализовать покупку в одик клик. Сделал обращение через аякс к снипиту, передаю в него айди, цену и т д, но какой код написать в самом снипите для добавления заказа не могу разобраться.

думаю что должно быть что то типо такого:

$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($modx->context->key);


$miniShop2->order->add( 'receiver', trim( 34 ) );
$miniShop2->order->add( 'email', trim( 314 ) );
$miniShop2->order->add( 'delivery', 1 ); // id метода доставки
$miniShop2->order->add( 'payment', 1 ); // id метода оплаты

Подскажите пожалуйста.
stas
18 июля 2016, 09:04
modx.pro
2
4 411
0

Комментарии: 6

Захарий
18 июля 2016, 15:32
0
Нужно использовать
$miniShop2->cart->add();
У меня такой сниппет QuickOrdera — остался еще от старых программистов
$context = $modx->context->get('key');
if ($context == 'mgr' || empty($_POST['quick_order']) || empty($_POST['id']) || empty($_POST['customer'])) {
	return;
}


/**
 * @var miniShop2 $miniShop2
 */
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize($context, array(
	'json_response' => false,
));
if (!($miniShop2 instanceof miniShop2)) {
   
	return;
}

$_POST['customer'] = array_merge(array(
	'delivery' => 1,
	'payment' => 1,
	'adress' => 'Quickbuy',
), $_POST['customer']);
foreach (array('email', 'phone', 'receiver', 'delivery', 'payment','adress') as $field) {
	$response = $miniShop2->order->add($field, $modx->getOption($field, $_POST['customer'], ''));
    
	if (empty($response['success'])) {
		return;
	}
}

$response = $miniShop2->cart->clean();

if (empty($response['success'])) {
	return;
}

$response = $miniShop2->cart->add($_POST['id'], $modx->getOption('count', $_POST, 1), $modx->getOption('options', $_POST, array()));


if (empty($response['success'])) {
	return;
}

$miniShop2->order->submit();
    stas
    19 июля 2016, 11:27
    0
    Не помог ваш код, почему то $miniShop2->order->submit(); не отрабатывает, добавление в корзину срабатывает, а именно с сабмитом проблемы ((
      Захарий
      19 июля 2016, 13:01
      0
      if (empty($response['success'])) {
      	return;
      }
      Значит эту проверку не проходит. Посмотрите что у вас в массиве $response обычным дебагом.
      Посмотрите еще в $_POST['customer'] после
      $_POST['customer'] = array_merge(array(
      	'delivery' => 1,
      	'payment' => 1,
      	'adress' => 'Quickbuy',
      ), $_POST['customer']);
        stas
        22 июля 2016, 09:22
        0
        В общем я делаю вот так

        $id = $_POST['id'];
         $id = $_POST['id'];
            $miniShop2 = $modx->getService('minishop2');
            $miniShop2->initialize('web');
            
            $miniShop2->order->add( 'receiver', 'sss'  );
            $miniShop2->order->add( 'email', 'kepamuk@yandex.ru' );
            // $miniShop2->order->add( 'delivery', 1 );
            $miniShop2->order->add( 'payment', 1 );
            
            $miniShop2->cart->add($_POST['id'], 1);
            
            $minishop2->order->submit();
        После чего выходит такая ошибка
        Fatal error: Call to a member function submit() on null in /home/s/spbsiayx/spbsiayx.bget.ru/public_html/core/cache/includes/elements/modsnippet/94.include.cache.php on line 40
        если убрать $minishop2->order->submit(); добавление в корзину сработает
        с чем это связано?
          Василий Наумкин
          22 июля 2016, 13:18
          0
          С невнимательностью.
          $miniShop2->cart->add($_POST['id'], 1);
          $minishop2->order->submit();
          Ничего не замечаешь в именах переменных?
            stas
            22 июля 2016, 13:22
            0
            Уже справился
            $scriptProperties = array(
                    'json_response' => true, // возвращать ответы в JSON
                    'max_count' => 1, // максимальное число товаров для добавления за один раз
                    'allow_deleted' => false, // не добавлять в корзину товары с deleted = 1
                    'allow_unpublished' => false, // не добавлять в корзину товары с published = 0
                );
                
                $miniShop2 = $modx->getService('minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
                // Инициализируем класс в текущий контекст
                $miniShop2->initialize($modx->context->key, $scriptProperties);
                $miniShop2->cart->clean();
                $miniShop2->cart->add($_POST['id']);
                $miniShop2->order->add('reciever','test');
                $miniShop2->order->add('email','kepamuk34@gmail.com');
                $miniShop2->order->add( 'payment', 1 );
                // $miniShop2->order->add( 'delivery', 1 );
                $miniShop2->order->submit();
            Но есть еще пара вопросов:
            1) Если указать $miniShop2->order->add( 'delivery', 1 ); то почему то письмо не приходит, не знаю чем доставка мешает отправке.
            2) Если поставить $miniShop2->cart->clean(); то отправится один товар как надо, но тогда если в корзине были товары, они удалятся, получается мне нужно как то сохранять текущие товары корзины, потому запускать этот скрипт и после него опять вставлять сохраненые товары в корзину так?
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    6