Помогите, пожалуйста, найти ошибку
После обновления miniShop2, скрипт импорта стал работать несколько некорректно: начали появляться «пустые» товары (Отсутствуют артикул, и все свойства товара. А вот alias создается, ровно как и сам товар создается там где нужно, в правильной категории). Несмотря на это, в базе, «пустых» товаров нет, все заливается правильно.
Помогите, пожалуйста, найти ошибку.
Помогите, пожалуйста, найти ошибку.
Комментарии: 8
Сниппет импорта был рабочим, и не раз им уже пользовались. После обновления miniShop2 что-то изменилось, и я к сожалению, не могу понять что. Я больше чем уверен, что любой соображающий специалист на этом форуме, решит мою проблему за 30 минут, и, разумеется, я за них заплачу. Только откликнитесь кто-нибудь, наконец
Взялся помочь опишу суть.
Скрипт импорта с простейшей логикой — берет специально подготовленный текстовый файлик, в котором содержится информация, с разделителем | и парсит его построчно забивая массив параметров.
Каждая позиция -определенное поле в MS2.
Вот пример набора данных:
Далее делается простая логика- что если товара с артикулом $productArray['article'] нету, то мы заводим новый, стандартным методом xPDO
Так вот, эта линейная логика на сервере у ТС работает, но через 1 строку-т.е первая строка обрабатывается, вторая нет, но сам getObject и save обрабатывается, а заполнение данными — нет. т.е затык на
На локальном сервере у меня все отрабатывает как надо, товары создаются параметры тоже… На Modx-test.com не проверял, но думаю будет все тоже ОК.
Поэтому, предполагаю что проблема с сервером.
А самим снипетом ТС может поделиться с общественность, если захочет… Могу предположить, что он может быть кому-то полезен.
Вот как-то так…
Скрипт импорта с простейшей логикой — берет специально подготовленный текстовый файлик, в котором содержится информация, с разделителем | и парсит его построчно забивая массив параметров.
Каждая позиция -определенное поле в MS2.
Вот пример набора данных:
111|S013278|Диск LS 109|5.5|13|4|98|35|58.6|GMF (Насыщенный темно серый. с полированной лицевой поверхностью)|1770|1|img/disc/ls/ls 109-gmf.jpg|Литой диск|2|img/ls_wheels1.png
ну и соответственно это породит такой вот массив:Array ( [published] => 1 [class_key] => msProduct [template] => 4 [show_in_tree] => 0 [source] => 2 [alias] => 111 [article] => S013278 [pagetitle] => Диск LS 109 [wl] => 5.5 [rad] => 13 [co] => 4 [pcd] => 98 [vl] => 35 [dl] => 58.6 [color] => GMF (Насыщенный темно серый. с полированной лицевой поверхностью) [price] => 1770 [bal] => 1 [image] => img/disc/ls/ls 109-gmf.jpg [dmat] => Литой диск [parent] => 2 [made] => img/ls_wheels1.png )
Далее идет соотношение MS2 к полям массива, в итоге получаем массив $productArray.Далее делается простая логика- что если товара с артикулом $productArray['article'] нету, то мы заводим новый, стандартным методом xPDO
if (!$ResourceMC = $modx->getObject('msProductData', array('article' => $artArr))) {
$product = $modx->newObject('msProduct');
ну и после этого, если все создалось мы просто берем и заполняем соответствующие поля и сохраняем ресурсы.$product->fromArray($productArray);
$product->save();
Да, там еще есть логика загрузки картинки, используя стандартный процессор MS2 ну и еще по мелочи, но суть предельна ясна.Так вот, эта линейная логика на сервере у ТС работает, но через 1 строку-т.е первая строка обрабатывается, вторая нет, но сам getObject и save обрабатывается, а заполнение данными — нет. т.е затык на
$product->fromArray($productArray);
При этом массив заполняется корректно, т.к я делаю ему print_r и смотрю что получилось, да и в журнал ничего не падает.На локальном сервере у меня все отрабатывает как надо, товары создаются параметры тоже… На Modx-test.com не проверял, но думаю будет все тоже ОК.
Поэтому, предполагаю что проблема с сервером.
А самим снипетом ТС может поделиться с общественность, если захочет… Могу предположить, что он может быть кому-то полезен.
Вот как-то так…
1й вариант — переписать на использование процессора создания ресурса. Это самый правильный вариант, хоть и не самый быстрый.
2й вариант — поколдовать с fromArray, например вот так:
3й вариант, уже от балды:
Если не поможет — то нужно смотреть исходный код скрипта.
Похоже, что из-за какой то ошибки к свежесозданному объекту msProduct не привязывается объект msProductData и просто некуда сохранять дополнительные значения, такие как цена, вес и пр.
2й вариант — поколдовать с fromArray, например вот так:
$product->fromArray($productArray, '', true, true);
$product->save();
Будет выставление первичного ключа и не будет конвертации значений, 3й вариант, уже от балды:
foreach ($productArray as $k => $v) {
$product->set($k, $v);
}
$product->save();
Аналогичен предыдущему.Если не поможет — то нужно смотреть исходный код скрипта.
Похоже, что из-за какой то ошибки к свежесозданному объекту msProduct не привязывается объект msProductData и просто некуда сохранять дополнительные значения, такие как цена, вес и пр.
1 — это самое верное решение, я того же мнения.
2,3 — пробовал сразу выставить подобное. не помогло…
По поводу ошибки — я ТС попросил протестить на нормальном сервере (Modx-test.com, или свой сделанный по твоей статье), у меня то все на локале работает.
Странная штука конечно…
2,3 — пробовал сразу выставить подобное. не помогло…
По поводу ошибки — я ТС попросил протестить на нормальном сервере (Modx-test.com, или свой сделанный по твоей статье), у меня то все на локале работает.
Странная штука конечно…
Перенес сайт на другой сервер, даже не полностью, только то, что нужно для проверки. База данных, соответственно, тоже новая, добавили туда поля. Как результат — импорт и тут выделывается, вернее я уже не знаю импорт или модх или минишоп или вообще я.
Clean, скажите, вы когда тестировали у себя, вы добавляли новые дополнительные поля товарам? (по методу, описанному Василием bezumkin.ru/modx/minishop2/classes/910/). Просто что-то я делаю не так, и сомневаюсь что дело в какой-то совместимости, это наверняка моя ошибка, помогите мне найти её, пожалуйста.
Clean, скажите, вы когда тестировали у себя, вы добавляли новые дополнительные поля товарам? (по методу, описанному Василием bezumkin.ru/modx/minishop2/classes/910/). Просто что-то я делаю не так, и сомневаюсь что дело в какой-то совместимости, это наверняка моя ошибка, помогите мне найти её, пожалуйста.
Нет чесно говоря, не добавлял.
Но тем не менее все поля по умолчанию подтянулись корректно у меня, в отличии от Вашего сервера.
Возможно с плагинами может быть такая же беда…
Я сейчас не готов чем либо еще помогать — много работы, предполагаю что нужно просить Василия, а в идеале переписать с использованием процессоров ваш сниппет.
Но тем не менее все поля по умолчанию подтянулись корректно у меня, в отличии от Вашего сервера.
Возможно с плагинами может быть такая же беда…
Я сейчас не готов чем либо еще помогать — много работы, предполагаю что нужно просить Василия, а в идеале переписать с использованием процессоров ваш сниппет.
Нет чесно говоря, не добавлял.Возможно, что проблема как раз в дополнительных полях, и если их игнорировать, скрипт работает как нужно.
Но тем не менее все поля по умолчанию подтянулись корректно...
в идеале переписать с использованием процессоров ваш сниппет...Сам я этого сделать, в любом случае, не сумею, но с удовольствием заплатил бы, сколько нужно, человеку, который бы для меня это сделал. Но таких людей найти сейчас практически нереально, я львиную долю свободного времени занимаюсь этим поиском, и единственное место, где мне помогли — блог Василия.
Василий, не знаю насколько это актуально для вас, но раз уж.
Могу я предложить вам этот скрипт, на свободное распространение, взамен на помощь в его доработке?
Могу я предложить вам этот скрипт, на свободное распространение, взамен на помощь в его доработке?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.