Помогите, пожалуйста, найти ошибку

После обновления miniShop2, скрипт импорта стал работать несколько некорректно: начали появляться «пустые» товары (Отсутствуют артикул, и все свойства товара. А вот alias создается, ровно как и сам товар создается там где нужно, в правильной категории). Несмотря на это, в базе, «пустых» товаров нет, все заливается правильно.



Помогите, пожалуйста, найти ошибку.
Пашкович Дмитрий
01 декабря 2013, 15:10
modx.pro
923
0

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

Пашкович Дмитрий
03 декабря 2013, 20:00
0
Сниппет импорта был рабочим, и не раз им уже пользовались. После обновления miniShop2 что-то изменилось, и я к сожалению, не могу понять что. Я больше чем уверен, что любой соображающий специалист на этом форуме, решит мою проблему за 30 минут, и, разумеется, я за них заплачу. Только откликнитесь кто-нибудь, наконец
    Clean
    04 декабря 2013, 21:48
    0
    Взялся помочь опишу суть.
    Скрипт импорта с простейшей логикой — берет специально подготовленный текстовый файлик, в котором содержится информация, с разделителем | и парсит его построчно забивая массив параметров.
    Каждая позиция -определенное поле в 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 не проверял, но думаю будет все тоже ОК.
    Поэтому, предполагаю что проблема с сервером.
    А самим снипетом ТС может поделиться с общественность, если захочет… Могу предположить, что он может быть кому-то полезен.
    Вот как-то так…
      Василий Наумкин
      05 декабря 2013, 01:45
      0
      1й вариант — переписать на использование процессора создания ресурса. Это самый правильный вариант, хоть и не самый быстрый.

      2й вариант — поколдовать с fromArray, например вот так:
      $product->fromArray($productArray, '', true, true);
      $product->save();
      Будет выставление первичного ключа и не будет конвертации значений,

      3й вариант, уже от балды:
      foreach ($productArray as $k => $v) {
      	$product->set($k, $v);
      }
      $product->save();
      Аналогичен предыдущему.

      Если не поможет — то нужно смотреть исходный код скрипта.
      Похоже, что из-за какой то ошибки к свежесозданному объекту msProduct не привязывается объект msProductData и просто некуда сохранять дополнительные значения, такие как цена, вес и пр.
        Clean
        05 декабря 2013, 01:58
        0
        1 — это самое верное решение, я того же мнения.

        2,3 — пробовал сразу выставить подобное. не помогло…

        По поводу ошибки — я ТС попросил протестить на нормальном сервере (Modx-test.com, или свой сделанный по твоей статье), у меня то все на локале работает.
        Странная штука конечно…
      Пашкович Дмитрий
      08 декабря 2013, 16:26
      0
      Перенес сайт на другой сервер, даже не полностью, только то, что нужно для проверки. База данных, соответственно, тоже новая, добавили туда поля. Как результат — импорт и тут выделывается, вернее я уже не знаю импорт или модх или минишоп или вообще я.
      Clean, скажите, вы когда тестировали у себя, вы добавляли новые дополнительные поля товарам? (по методу, описанному Василием bezumkin.ru/modx/minishop2/classes/910/). Просто что-то я делаю не так, и сомневаюсь что дело в какой-то совместимости, это наверняка моя ошибка, помогите мне найти её, пожалуйста.
        Clean
        08 декабря 2013, 21:02
        0
        Нет чесно говоря, не добавлял.
        Но тем не менее все поля по умолчанию подтянулись корректно у меня, в отличии от Вашего сервера.

        Возможно с плагинами может быть такая же беда…

        Я сейчас не готов чем либо еще помогать — много работы, предполагаю что нужно просить Василия, а в идеале переписать с использованием процессоров ваш сниппет.
          Пашкович Дмитрий
          08 декабря 2013, 21:19
          0
          Нет чесно говоря, не добавлял.
          Но тем не менее все поля по умолчанию подтянулись корректно...
          Возможно, что проблема как раз в дополнительных полях, и если их игнорировать, скрипт работает как нужно.

          в идеале переписать с использованием процессоров ваш сниппет...
          Сам я этого сделать, в любом случае, не сумею, но с удовольствием заплатил бы, сколько нужно, человеку, который бы для меня это сделал. Но таких людей найти сейчас практически нереально, я львиную долю свободного времени занимаюсь этим поиском, и единственное место, где мне помогли — блог Василия.
        Пашкович Дмитрий
        08 декабря 2013, 22:11
        0
        Василий, не знаю насколько это актуально для вас, но раз уж.
        Могу я предложить вам этот скрипт, на свободное распространение, взамен на помощь в его доработке?
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8