Всего 123 806 комментариев

Алексей Смирнов
08 марта 2023, 20:21
0
Ну если квалификация позволяет расковырять — расковыряйте.
Там встроенный обработчик. Можно по аналогии сделать свой. И тогда получите свой вариант.
Prihod
08 марта 2023, 20:19
+1
Все те кто при установки базового пакета выбирает также установку всех нужных ему и не нужных дополнительных пакетов расширяющих базовый должны иметь ввиду, что вам может не хватить лимита времени которое у вас отведено на выполнение php скрипта из-за чего пакеты либо вообще не установятся, либо установятся не полностью. В итоге у вас лог ошибок modx будет забит ошибками вида

Problem getting service iemsoptionsprice2, instance of class IeMsOptionsPrice2, from path
Problem getting service iemssaleprice, instance of class IeMsSalePrice, from path
Problem getting service iemsoptionscolor, instance of class IeMsOptionsColor, from path
Что бы их убрать нужно либо установить/переустановить пакеты фигурирующие в логе классическим способом, либо удалить о них информацию в следующих местах

  1. На странице пространство имен /manager/?a=workspaces/namespace
  2. В системных настройках в опции extension_packages /manager/?a=system/settings
  3. Также может понадобиться удалить, если он есть, плагин его дополнения
Александр
08 марта 2023, 20:19
0
Как понял, в самом компоненте, в котором работал с контроллером.
Использовал свой код + ваши подсказки и код в другом контроллере от zoomx и все сработало.
Хотя до этого и там не работало.
Константин Ильин
08 марта 2023, 20:16
0
Не за что! В чем была проблема?
Александр
08 марта 2023, 20:06
0
в итоге получилось.
Спасибо вам больше за помощь!
Константин Ильин
08 марта 2023, 19:04
0
Тут дальше только выяснять постепенно как я писал вам ранее, выводите в лог или как то логгируйте, что получаете и т.д. сам Пример(!) как у меня работает я дал, ну и в теории повторюсь вы получаете строку с заказом ее надо из json вытащить и получить заказ.

так же в вашем коде два раза вызывается $miniShop2->order->submit()

Так же вы не поменяли $modx на $this->modx
Адаптируйте мой код под ваш самостоятельно
Александр
08 марта 2023, 18:49
0
все вызывается и работает (заказ то создается), если отключить json_response, то я получу ответ в том виде, который я отдаю, но без id новосозданного заказа.
Данный контроллер используется в api для построения фронта отдельно от modx
Константин Ильин
08 марта 2023, 18:41
0
у вас видимо какой-то отдельный компонент-класс и как вы его запускаете не совсем понятно, но пользуйтесь тогда для отладки, в разных участках кода
$this->modx->log(1, print_r($result,1));
Смотреть в Журнале ошибок в самом модх.
Начните с самого простого в самом начале функции post()
$this->modx->log(1, print_r('Это я class shopOrder2 запустился',1));
если у вас журнале вообще ничего не выводит и ошибки тоже(и ошибки в серверном логе тоже нет), то скорее всего ваш класс вообще не запускается и с ним не работает modx или вы его вообще не вызываете и т.п.
Александр
08 марта 2023, 18:20
0
<?php

class shopOrder2 extends shopBaseRestController
{
    public $allowedMethods = array('post');

    public function post()
    {
        
        // инициализируем miniShop2
            $scriptProperties = [
                'json_response' => 1,
            ];
        	
        	$miniShop2 = $this->modx->getService('minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
        	
        	// опции товара, если они необходимы
        	$option = array();
        	/*$option = array(
        	  "option1" => "value1",
        	  "option2" => "value2",
        	);*/
        	// инициализируем miniShop2 в текущем контексте
        	$miniShop2->initialize($this->modx->context->key, $scriptProperties);
        
        $cart = $miniShop2->cart->get();

        if (!count($cart)) {
            $result = [
                'message' => 'Корзина пуста',
                'success' => false
            ];
            return $this->failure('', $result);
        }

        //Получатель
        $email = $this->getProperty('email');
        $phone = $this->getProperty('phone');
        $receiver = $this->getProperty('name');

        //Дата и время доставки
        //$soon = (bool)$this->getProperty('soon');
        $delivery_date = $this->getProperty('delivery_date');
        $delivery_time = $this->getProperty('delivery_time');

        //Адрес
        $street = $this->getProperty('street');
        $building = $this->getProperty('building');
        $room = $this->getProperty('apartment');
        $entrance = $this->getProperty('entrance');
        $floor = $this->getProperty('floor');

        $comment = $this->getProperty('comment');

        //Доставка и оплата
        $payment = (int)$this->getProperty('payment');
        $delivery = (int)$this->getProperty('delivery');

        $miniShop2->order->add('payment', $payment);
        $miniShop2->order->add('delivery', $delivery);

        $miniShop2->order->add('receiver', $receiver);
        $miniShop2->order->add('email', $email);
        $miniShop2->order->add('phone', $phone);

        $miniShop2->order->add('soon', $soon);
        $miniShop2->order->add('delivery_date', $delivery_date);
        $miniShop2->order->add('delivery_time', $delivery_time);

        $miniShop2->order->add('street', $street);
        $miniShop2->order->add('building', $building);
        $miniShop2->order->add('room', $room);
        $miniShop2->order->add('entrance', $entrance);
        $miniShop2->order->add('floor', $floor);
        $miniShop2->order->add('comment', $comment);

        $result['r'] = json_decode($miniShop2->order->submit(),1);
        
        $result['r'] = $arr = json_decode($miniShop2->order->submit(),1);
        if($arr['success'] && $arr["data"]["msorder"] > 0){
            $msOrder = $modx->getObject('msOrder', $arr["data"]["msorder"]);
            $order = $msOrder->toArray();
            $result['orderId'] = $order;
            $resp['out'] = $pdo->parseChunk('@FILE cart/fastOrderSuccess.tpl',$arr);
        }
        $result['orderId'] = $response['data']['msorder'];
        
        return $this->success('', $result);

    }
}
Константин Ильин
08 марта 2023, 18:11
0
код весь покажите тогда

там еще $pdo->… выше получаю:
$pdo = $modx->getService('pdoTools');
Александр
08 марта 2023, 17:57
0
Не помогло, к сожалению.
Повторил ваше получение заказа и все равно тот же вывод
{"success":true,"message":"","data":{"msorder":56}}
в виде html с игнорированием вообще каких-либо конструкций вывода информации. Что само по себе очень странно.
Даже нет ошибки из-за отсутствия такого чанка как у вас (специально решил не менять, чтобы вызвать ошибку)
Константин Ильин
08 марта 2023, 16:54
0
не только 'json_response' => 1, а getService тоже смотрите параметры передаю
Константин Ильин
08 марта 2023, 16:44
0
видимо у меня так же, т.е. нужно самостоятельно получить заказ, т.к. далее у меня такой код:

$resp['r'] = $arr = json_decode($miniShop2->order->submit(),1);
if($arr['success'] && $arr["data"]["msorder"] > 0){
    $msOrder = $modx->getObject('msOrder', $arr["data"]["msorder"]);
    $order = $msOrder->toArray();
    $resp['out'] = $pdo->parseChunk('@FILE cart/fastOrderSuccess.tpl',$arr);
}
Александр
08 марта 2023, 16:03
0
Действительно
$scriptProperties = ['json_response' => 1];
помогает, но в таком случае ответ приходит в виде html с содержимым {«data»: {«msorder»:15}} и полностью игнорирует построение ответа.
Вот пример:
if (isset($response['success']) && $response['success'] == true) {
            $result['post'] = $this->properties;
            $result['response'] = $response;
            $result['orderId'] = $response['data']['msorder'];
            $miniShop2->cart->clean();
            return $this->success('', $result);
        }
и по идее, вывод должен быть таким только с наполненной data[]:
{
    "success": true,
    "message": "",
    "object": {
        "post": {
            "payment": "1",
            "delivery": "1",
            "name": "Алекс",
            "email": "test@test.ru"
        },
        "response": {
            "success": true,
            "message": "",
            "data": []
        },
        "orderId": null
    },
    "code": 200
}
а выведет при включенном json_response вот так:
{"success":true,"message":"","data":{"msorder":53}}
Причем в html формате.

Никак не могу решить данную проблему
Константин Ильин
08 марта 2023, 15:55
0
У меня так вызывается
$scriptProperties = [
     'json_response' => 1,
];
/* возможно эта строчка поможет */
$miniShop2 = $modx->getService('minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);

$miniShop2->initialize($modx->context->key, $scriptProperties);
$miniShop2->order->clean();
$miniShop2->cart->clean();
$miniShop2->cart->add($dataForm['id'],($dataForm["count"] ?: 1),$option);
/* ... */
$resp['r'] = json_decode($miniShop2->order->submit(),1);
Александр
08 марта 2023, 15:17
0
вот спустя почти 4 года проблема с
$miniShop2->order->submit()
осталась.
Удалось кому-то решить?
Игорь
08 марта 2023, 12:52
0
да вот хотелось что б фотки и видео можно было в перемешку. Странно что нельзя расковырять migx и отключить проверку наличия загруженной фотографии.

А что если при добавлении одиночного фото у тв что б сразу в поле инпут была какая-нибудь фотка заглушка. (Тогда при удалении видео удалится и картинка и везде где она была указана у видео).
Алексей Смирнов
08 марта 2023, 10:53
0
ТВ и феном не связаны.
Я говорю про фронт. что на феноме проще делается обьединение информации от 2х ТВ, чем на парсере.
На парсере MODX придется не обьединять а выводить по очереди. например сначала фотки потом видео или наоборот.
в принфипе и на феном последовательность так же будет либо фото и потом видео, но кода в 2 раза меньше.
Валерий
07 марта 2023, 22:09
0
Понимаю, что сто лет прошло, но может вы как-то решили эту проблему?
Тоже не подтягивается CSS после манипуляций выше. Делаю через Ajax + Formit. Сам PDF формируется и ссылка на него в письме приходит.