Сегодня наткнулся на жесточайшую багу… У кого развернута сборка магазина или хотя бы стоит пакет shopModx, попробуйте в консоли выполнить вот такой код: <?php print '<pre>'; $q = $this->modx->newQuery('ShopmodxProduct'); $q->command('update'); $q->set(array( 'sm_price' => 154.99,
));

if($q->prepare()){
print $q->toSQL(); } Результат: UPDATE modx_shopmodx_products SET sm_price = 154 Не 154.99, а просто 154… Думаю, каждый понимает печальность последствий, особенно когда полно товаров с ценниками типа 0.99 Но что тут самое интересное? А то, что если просто выполнить вот так, то все будет ОК: $o = $modx->getObject('ShopmodxProduct', $id); $o->set('sm_price', 154.99); $o->save(); Первое: такое переменчивое поведение связано с тем, что через разные методы используются различные механизмы формирования запросов. К примеру, при вызове xPDOObject::save() у нас вполне явный SQL формируется. А вот при использовании xPDOQuery::set() уже механизм другой. И здесь самая западня вот в этих строчках: elseif (!in_array($fieldMeta[$key]['phptype'], $this->_quotable)) { $type= PDO::PARAM_INT; } А какие типы у нас quotable? 'string', 'password', 'date', 'datetime', 'timestamp', 'time' Как видим, там нет ни double, ни float. В итоге все приводится к INT-типу, а это, как известно, не подразумевает дробные числа. При этом в PDO в принципе нет ничего типа FLOAT или типа того. В сети полно вопросов PDO::PARAM_FLOAT does not exist, why?. В итоге, видится только один вариант — определить float и double как строковые. А там сама база данных пусть занимается вопросами конвертации, она это обязательно сделает. Отправил PR. Честно говоря, бага на столько скрытая, что я даже уже почти забил… Но в последний момент чутье вывело меня к нужной строчке. немного похвастаюсь)))

Пожалуйста. И бери на вооружение, потом что это очень мощный механизм. Правда есть баги :-)

Спасибо, теперь разобрался.

Спасибо, разбираюсь потихоньку с getdata-процессором, а что бы понять как он работает отдельные части отрабатываю на чистых запросах через консоль.

Значит вы не все ошибки нам показали. Шлите в личку доступы в админку.

Если LogLevel(1), то просто модальное окно с сообщение «syntax error:». И все. Данные при этом не сохраняются.

DEBUG — это вообще не серьезно. Это просто отладка. Поменяйте $modx->setLogLevel(3); на $modx->setLogLevel(1); или $modx->setLogLevel(xPDO::LOG_LEVEL_ERROR); и все. Это просто информационные сообщения.

Так это и есть весь код. Процессор 'web/catalog/products/article/getdata' сделан по образу и подобию из топика про поиск по tv. Вот ответ, если поменять loglevel: print '</pre>'; Loading... syntax error: [2013-11-27 17:40:00] (DEBUG @ /manager/components/console/connectors/console.php) Language string not found: "Имя возвращающей значение функции. getBaseUrl или getBasePath" [2013-11-27 17:40:00] (DEBUG @ /manager/components/console/connectors/console.php) Language string not found: "" [2013-11-27 17:40:00] (DEBUG @ /manager/components/console/connectors/console.php) Language string not found: "id медиасурса. Обязательное" Плюс еще несколько таких же DEBUG.

Выложите полный листинг кода, в котором возникает ошибка, и полный текст ошибки.