Minishop2

Добрый день!

При создании товара в категории, товар создается с ID 0. После чего все попытки редактирования выдают что то типа «Ресурс с идентификатором ext-record-295 не найден»… Куда копать?

MODX Revolution 2.2.8-pl (traditional)
pdoTools 1.4
miniShop2 2.0.1
Дмитрий Путов
11 августа 2013, 20:28
modx.pro
3 780
0

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

Василий Наумкин
12 августа 2013, 06:12
0
Версия php?

Если ниже 5.3, то нужно обновиться.
Дмитрий Путов
12 августа 2013, 08:32
0
PHP Version 5.4.13
MySQL 5.0.45

в логе прочитал

[2013-08-11 23:42:12] (ERROR @ /assets/components/minishop2/connector.php) Error HY000 executing statement:
INSERT INTO `ms2_products` (`id`, `price`, `old_price`, `weight`, `vendor`, `new`, `popular`, `favorite`, `source`) VALUES (7, '0', '0', '0', 0, 0, 0, 0, 1)
Array
(
[0] => HY000
[1] => 1364
[2] => Field 'made_in' doesn't have a default value
)

убрал из default значения ' ' поставил просто test

потом получил последовательно ошибки по price и weight.

INSERT INTO `ms2_products` (`id`, `article`, `price`, `old_price`, `weight`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`) VALUES (16, 0, '', '', '', 0, 'test3', 0, 0, 0, '[\"\"]', '[\"\"]', '[\"\"]', 2)
Array
(
[0] => HY000
[1] => 1366
[2] => Incorrect decimal value: '' for column 'price' at row 1
)

Поправил тип DECIMAL 13,2 и 13,3 на 10,2 и 10,3 соответственно.

Вроде после это все вставилось корректно.
    Василий Наумкин
    12 августа 2013, 10:21
    0
    Как то очень странно.

    У тебя одного такие ошибки, больше никто не жаловался. Ради интереса, проверь на modx-test.com
      Дмитрий Путов
      12 августа 2013, 23:33
      0
      М.б. проблема видимо в скрипте создания таблиц при установке ms2? Он походу создает некорректные типы полей. На тестовом сайт все ок.
        Евгений Дурягин
        12 августа 2013, 23:41
        0
        Еще может в настройках MySQL. Например, что указано в sql mode в PHPMyAdmin на вкладке «Переменные».
        Похоже что установлен strict режим.
    Сергей
    17 августа 2013, 02:36
    0
    Буду вторым. Точно такая же ошибка.
    PHP 5.4.0
    MariaDB 10.0

    Помогла правка my.ini, а точнее было:
    sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"
    Стало:
    sql_mode="NO_ENGINE_SUBSTITUTION"
      Дмитрий Путов
      18 августа 2013, 21:11
      0
      Да, есть такое. Покурил мануалы на этот счет. Если мы убираем STRICT_TRANS_TABLES, то mysql начинает подставлять корявые значения переданные в виде параметров в INSERT как значения из DEFAULT, в противном случае (т.е. при выставленном STRICT_TRANS_TABLES) он проверяет тип передаваемого параметра и пытается видимо его привести к типу поля таблицы. Поскольку Минишоп при INSERTе записи в ms2_products для полей цена, цена_старая, вес (которые DECIMAL) пытается выполнить INSERT… VALUES (… '','',''...), т.е. «строка» то это не проканывает и валится по ошибки. Которую мы и видим в логах. Есть несколько вариантов решения:
      1. Автору подправить INSERT на то чтобы в поля с числовыми значениями писалось не строковые константы, а именно числа. По мне так самый корректный способ.
      2. Автору подправить INSERT на INSERT IGNORE, что должно решить эту проблему как если бы был выключен STRICT_TRANS_TABLES.
      3. Ручками отключать(как правильно заметил F Sergey) в конфигах mysql директиву sql-mode. (что мне кажется не правильным, потому как м.б. нужно STRICT_TRANS_TABLES в других случаях на этом сервере. Тут и контроль правильности даты и прочая, на что mysql будет возбуждаться.

      ИМХО.
        Василий Наумкин
        18 августа 2013, 21:23
        0
        Там везде работает xPDO, я не вмешиваюсь.
          Василий Наумкин
          25 августа 2013, 14:55
          0
          Более-менее разобрался с вопросом.

          В версии 2.1.0 будет исправлено.
            Роман Садоян
            27 ноября 2017, 16:35
            +1
            [2017-11-27 16:11:09] (ERROR @ /public_html/core/xpdo/om/xpdoobject.class.php : 1452) Error 22007 executing statement:
            INSERT INTO `modx_ms2_products` (`id`, `article`, `price`, `old_price`, `weight`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`) VALUES (22, '0293', '7700', '', '', 1, '', 0, 0, 0, '[\"\"]', '[\"\"]', '[\"\"]', 3)
            Array
            (
                [0] => 22007
                [1] => 1366
                [2] => Incorrect decimal value: '' for column 'old_price' at row 1
            )

            PHP 7.1.12
            mysql Ver 15.1 Distrib 10.2.10-MariaDB
            MODX 2.6.0pl
            minishop2 2.4.11-pl

            Ошибка возникает при создании товара. При открытии уже созданного товара в полях цена, старая цена подставляются нули.

            На mariadb 10.0 — всё работает.
      Iskatel
      03 июля 2018, 04:34
      0
      Уважаемый, Василий!
      Та же проблема, долго разбирался, даже тему создал.
      Решение — из поста выше, Роман Садоян.
      Вопрос — при обновлении, create.class.php — перезапишется.
      Как этого избежать?
      Просьба, при очередном обновлении версии miniShop2, по возможности исправить «Incorrect decimal value».
      Спасибо.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        13