Подмена значений полей при импорте из csv (miniShop2)
Здравствуйте! Помогите, пожалуйста, не первый день бьюсь.
Пытаюсь грузить на сайт из .csv минишоповским скриптом от Василия. При создании товаров ряд значений полей почему-то записывается по умолчанию, независимо от данных в файле. При этом файл читается корректно, в режиме debug правильно формируется массив данных для записи, а вот дальше проблемы.
Подробнее.Сайт на MODX Revolution 2.7.0-pl, хостинг beget, PHP Version 7.1.33-3+ubuntu18.04.1, используется miniShop2. Я не владелец сайта, просто гружу контент, потому настраивать под себя не могу и всех прав не имею — только вход в админку. Запускать пришлось из приложения Console, при этом был вынужден изменить код для ввода с параметров на прямой ввод констант в окно кода:
Сам код взял отсюда.
Пример того, что получается. Параметры ввода выше. Данные файла
Результат работы:
Значения полей созданного товара
Получается, что массив записан правильно, товар создается, но процессор create выдает ошибки и заменяет ряд полей своими значениями (в этом примере поле source, в которое записывается 1 вместо 2, но то же, например, с article (всегда записывается пустая строка).
Что можно сделать?
Еще есть сложности с режимом обновлений, с полями id, alias, uri, но это вроде преодолимо, а без загрузки Source смыл теряется.
PHP я базово понимаю, но в MODX, MiniShop, SQL разбираться уже сложно.
Большое спасибо за помошь!
Пытаюсь грузить на сайт из .csv минишоповским скриптом от Василия. При создании товаров ряд значений полей почему-то записывается по умолчанию, независимо от данных в файле. При этом файл читается корректно, в режиме debug правильно формируется массив данных для записи, а вот дальше проблемы.
Подробнее.Сайт на MODX Revolution 2.7.0-pl, хостинг beget, PHP Version 7.1.33-3+ubuntu18.04.1, используется miniShop2. Я не владелец сайта, просто гружу контент, потому настраивать под себя не могу и всех прав не имею — только вход в админку. Запускать пришлось из приложения Console, при этом был вынужден изменить код для ввода с параметров на прямой ввод констант в окно кода:
$file = "core/import/Test2.txt";
$fields = "pagetitle,parent,content,template,source,longtitle";
$update = (bool) TRUE;
$key = "longtitle";
$is_debug = (bool) TRUE;
$delimeter = "|";И еще поправить расширение файла в тексте скрипта на txt, так как csv мне грузить не разрешается.elseif (!preg_match('/\.txt$/i', $file)) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Wrong file extension. File must be an *.csv.');
exit;
}Сам код взял отсюда.
Пример того, что получается. Параметры ввода выше. Данные файла
"test1"|"5231"|"тест1,<br>
тест<br>
""тест"" тест"|"2"|"test1long"|
"test2"|"5231"|"тест2,<br>
тест<br>
тест тест"|"2"|"test2long"|Результат работы:
[2020-02-10 03:57:29] (INFO @ /home/s19231/www/core/components/console/processors/exec.class.php(24) : eval()'d code : 25)
Trying to set time limit = 600 sec: error
[2020-02-10 03:57:29] (INFO @ /home/s19231/www/core/components/console/processors/exec.class.php(24) : eval()'d code : 72)
Raw data for import:
Array
(
[0] => test1
[1] => 5231
[2] => тест1,
тест
"тест" тест
[3] => 2
[4] => test1long
[5] =>
)
[2020-02-10 03:57:29] (INFO @ /home/s19231/www/core/components/console/processors/exec.class.php(24) : eval()'d code : 106)
Array with importing data:
Array
(
[pagetitle] => test1
[parent] => 5231
[content] => тест1,
тест
"тест" тест
[source] => 2
[longtitle] => test1long
[class_key] => msProduct
[context_key] => web
[tvs] =>
)
[2020-02-10 03:57:29] (INFO @ /home/s19231/www/core/components/console/processors/exec.class.php(24) : eval()'d code : 123)
SQL query for check for duplicate:
SELECT msProduct.id FROM `modx_site_content` AS `msProduct` JOIN `modx_ms2_products` `Data` ON msProduct.id = Data.id WHERE `msProduct`.`longtitle` = 'test1long'
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/xpdo/xpdo.class.php : 1826)
No foreign key definition for parentClass: msProduct using relation alias: Data
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1129)
Could not getOne: foreign key definition for alias Data not found.
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/xpdo/xpdo.class.php : 1826)
No foreign key definition for parentClass: msProduct using relation alias: msProductData
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1250)
Foreign key definition for class , alias msProductData not found, or cardinality is not 'one'.
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1256)
Could not add related object! Array
(
[id] =>
[article] =>
[price] => 0
[old_price] => 0
[weight] => 0
[image] =>
[thumb] =>
[vendor] => 0
[made_in] =>
[new] =>
[popular] =>
[favorite] =>
[tags] =>
[color] =>
[size] =>
[source] => 1
)
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/model/modx/modx.class.php : 1670)
[OnDocFormSave]
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/xpdo/xpdo.class.php : 1826)
No foreign key definition for parentClass: msProduct using relation alias: Data
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1129)
Could not getOne: foreign key definition for alias Data not found.
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/xpdo/xpdo.class.php : 1826)
No foreign key definition for parentClass: msProduct using relation alias: msProductData
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1250)
Foreign key definition for class , alias msProductData not found, or cardinality is not 'one'.
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1256)
Could not add related object! Array
(
[id] =>
[article] =>
[price] => 0
[old_price] => 0
[weight] => 0
[image] =>
[thumb] =>
[vendor] => 0
[made_in] =>
[new] =>
[popular] =>
[favorite] =>
[tags] =>
[color] =>
[size] =>
[source] => 1
)
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/model/modx/modx.class.php : 1670)
[OnDocFormSave]
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/xpdo/xpdo.class.php : 1826)
No foreign key definition for parentClass: msProduct using relation alias: Data
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1129)
Could not getOne: foreign key definition for alias Data not found.
[2020-02-10 03:57:29] (ERROR @ /home/s19231/www/core/xpdo/xpdo.class.php : 1826)
No foreign key definition for parentClass: msProduct using relation alias: msProductData
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1250)
Foreign key definition for class , alias msProductData not found, or cardinality is not 'one'.
[2020-02-10 03:57:29] (WARN @ /home/s19231/www/core/xpdo/om/xpdoobject.class.php : 1256)
Could not add related object! Array
(
[id] =>
[article] =>
[price] => 0
[old_price] => 0
[weight] => 0
[image] =>
[thumb] =>
[vendor] => 0
[made_in] =>
[new] =>
[popular] =>
[favorite] =>
[tags] =>
[color] =>
[size] =>
[source] => 1
)
[2020-02-10 03:57:29] (INFO @ /home/s19231/www/core/components/console/processors/exec.class.php(24) : eval()'d code : 156)
Successful create:
Array
(
[id] => 6631
)
[2020-02-10 03:57:29] (INFO @ /home/s19231/www/core/components/console/processors/exec.class.php(24) : eval()'d code : 184)
You in debug mode, so we process only 1 row. Time: 0.7503481 s Значения полей созданного товара
Array
(
[id] => 6631
[type] => document
[contentType] => text/html
[pagetitle] => test1
[longtitle] => test1long
[description] =>
[alias] => test1
[alias_visible] => 1
[link_attributes] =>
[published] =>
[pub_date] => 0
[unpub_date] => 0
[parent] => 5231
[isfolder] =>
[introtext] =>
[content] => тест1,
тест
"тест" тест
[richtext] => 1
[template] => 0
[menuindex] => 35
[searchable] => 1
[cacheable] => 1
[createdby] => 6060
[createdon] => 2020-02-10 03:57:29
[editedby] => 0
[editedon] => 0
[deleted] =>
[deletedon] => 0
[deletedby] => 0
[publishedon] => 0
[publishedby] => 0
[menutitle] =>
[donthit] =>
[privateweb] =>
[privatemgr] =>
[content_dispo] => 0
[hidemenu] =>
[class_key] => msProduct
[context_key] => web
[content_type] => 1
[uri] => test1
[uri_override] => 0
[hide_children_in_tree] => 0
[show_in_tree] => 0
[exclude_alias_in_childs] => 0
[properties] => Array
(
[stercseo] => Array
(
[index] => 1
[follow] => 1
[sitemap] => 1
[priority] => 0.5
[changefreq] => weekly
)
)
[article] =>
[price] => 0
[old_price] => 0
[weight] => 0
[image] =>
[thumb] =>
[vendor] => 0
[made_in] =>
[new] =>
[popular] =>
[favorite] =>
[tags] =>
[color] =>
[size] =>
[source] => 1
[vendor.id] =>
[vendor.name] =>
[vendor.resource] => 0
[vendor.country] =>
[vendor.logo] =>
[vendor.address] =>
[vendor.phone] =>
[vendor.fax] =>
[vendor.email] =>
[vendor.description] =>
[vendor.properties] =>
)Получается, что массив записан правильно, товар создается, но процессор create выдает ошибки и заменяет ряд полей своими значениями (в этом примере поле source, в которое записывается 1 вместо 2, но то же, например, с article (всегда записывается пустая строка).
Что можно сделать?
Еще есть сложности с режимом обновлений, с полями id, alias, uri, но это вроде преодолимо, а без загрузки Source смыл теряется.
PHP я базово понимаю, но в MODX, MiniShop, SQL разбираться уже сложно.
Большое спасибо за помошь!
Комментарии: 3
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
[id] =>
[article] =>
[price] => 0
[old_price] => 0
[weight] => 0
[image] =>
[thumb] =>
[vendor] => 0
[made_in] =>
[new] =>
[popular] =>
[favorite] =>
[tags] =>
[color] =>
[size] =>
[source] => 1
Но вот удается создать, блин, судя по результату. Там, где пусто, записывается "".
При этом далее присваивается новый id, так что id — это единственное поле из всего этого списка, которое не остается со значением как в списке.
И еще не так, как в csv-файле, пишется значение поля menuindex. Уж не знаю, о чем это говорит.
Может, дело в каких-то системных параметрах, или какие-то плагины перехватывают события? Как это можно проверить? Потому что на тестовых серверах же все проверяли, у всех работает.
Если ничего не поможет, имеет ли смысл поправить скрипт следующим образом — прописать дополнительно после вызова процессора эти поля через set и save, а уже потом вернуться к обработке галереи? Или как лучше?
В поля добавлено gallery,gallery
В файл |«core/import/1.jpg»|«core/import/2.jpg»
Хвост лога (до этого все аналогично предыдущему)
Как-то после этого заполнять значения других полей через set кажется бессмысленным. Или все-таки стоит попробовать. Может быть проблема в неверных значениях других полей?