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

Scorp Satex
09 марта 2023, 23:32
0
msFavorites.ids — тоже наследует общие параметры от pdoTools.

Попробуйте прописать:

[[!msFavorites.ids?
&limit=`99`
]]
Сергей Карпович
09 марта 2023, 20:54
0
отбой, не в то поле смотрел. от сниппета не зависит
Артур Шевченко
09 марта 2023, 18:51
0
Скиньте вызов, я посмотрю. А вообще, AjaxForm точно так же работает, показывает все ошибки сразу.
Сергей Карпович
09 марта 2023, 13:15
0
Интересно то, что если я исполню сниппет AjaxForm то такой проблемы не возникает
Сергей
09 марта 2023, 12:42
0
Убил день жизни, расковырял. В ядре ошибка.
Файл /core/vendor/xpdo/xpdo/src/xPDO/xPDOConnection.php
В строке
$connectFile = XPDO_CORE_PATH. 'om/'. $this->config['dbtype']. '/connect.inc.php';
меняем
'om/' на 'Om/'
Ошибка не позволяет подключить файл, в котором ставится SET NAMES. Вероятно, следует сообщить разработчикам.
Артур Шевченко
09 марта 2023, 12:28
0
Немного не по адресу вопрос, за валидацию отвечает FormIt.
Сергей Карпович
09 марта 2023, 12:14
0
Если для поля установлено несколько валидаторов, например:
name.vTextRequired и name.vTextMinLength
То при незаполненном поле — показывается текст ошибки и с первого валидатора со второго валидатора, хотя до него еще не дошли. Это можно поправить?
Те. если поле не заполнено — показываем name.vTextRequired, если заполнено мало, то name.vTextMinLength
Денис Усачев
09 марта 2023, 12:09
0
msFavorites.ids
<?php
/** @var array $scriptProperties */
/** @var msFavorites $msFavorites */
if (!$msFavorites = $modx->getService('msfavorites.msFavorites', '', MODX_CORE_PATH . 'components/msfavorites/model/')) {
    return 'Could not load msFavorites class!';
}
/** @var pdoFetch $pdoFetch */
if (!$modx->loadClass('pdofetch', MODX_CORE_PATH . 'components/pdotools/model/pdotools/', false, true)) {
    return false;
}

if (!empty($returnIds)) {
    $return = 'ids';
}
if ($return === 'ids') {
    $returnIds = 1;
}

if (!isset($list) OR $list == '') {
    $list = 'default';
}
if (!isset($type) OR $type == '') {
    $type = 'resource';
}

$list = is_array($list) ? $list : array_map('trim', explode(',', $list));
$rows = $modx->runSnippet('msFavorites.objects', array_merge($scriptProperties, ['return' => 'data', 'list' => $list, 'type' => $type, 'groupKey' => 'list']));
$pls = [
    'list'  => [],
    'total' => [],
];
foreach ($list as $l) {
    $keys = !empty($rows[$l]) ? array_column($rows[$l], 'key') : [];
    $pls['list'][$l] = !empty($keys) ? implode(',', $keys) : '-0';
    $pls['total'][$l] = count($keys);
}
$msFavorites->setPlaceholders($pls);

$log = '';
if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) {
    $log .= '<pre class="msFavoritesLog">' . print_r($pdoFetch->getTime(), 1) . '</pre>';
}
$modx->setPlaceholder('msFavorites.log', $log);

$output = [];
switch ($return) {
    case 'data':
        $output = $pls;
        break;
    case 'json':
        $output = json_encode($pls, true);
        break;
    case 'ids':
    default:
        $output = reset($pls['list']);
        if (!empty($toPlaceholder)) {
            $modx->setPlaceholder($toPlaceholder, $output);
            $output = '';
        }
        break;
}

return $output;
Денис Усачев
09 марта 2023, 11:42
0
1. выдает ровно 10 id [32,46,55,64,73,84,95,105,114,120]

2. pdoPage &limit=`999` ставлю но без изминений,
так как в resources передаю id
&resources=`{'!msFavorites.ids' | snippet}`  
что равно 
&resources=`32,46,55,64,73,84,95,105,114,120`
Scorp Satex
09 марта 2023, 10:21
0
1. Вызов
{'!msFavorites.ids' | snippet}
— сколько idшников выдает? тоже 10 штук или больше?
2. У pdoPage есть параметры: docs.modx.pro/komponentyi/pdotools/snippetyi/pdopage Один из них — &limit по умолчанию limit и там указано 10. Попробуйте указать там 99.
Алексей Смирнов
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);

    }
}