Загрузка в minishop2 из yml

Добрый вечер, коллеги.
С праздником, с рождеством!..

Нужен совет-подсказка.
Как создать каталог товаров в minishop2 из файла xml, yml?
Марк Валерич
07 января 2016, 16:31
modx.pro
1
5 314
0

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

Михаил Божко
09 января 2016, 11:53
-1
Подправить файл csv.php, и будет тебе счастье;-)
    Fi1osof
    09 января 2016, 13:35
    0
    Вы серьезно? По вашему разница между CSV и XML такая ничтожная?
      Михаил Божко
      09 января 2016, 13:59
      0
      Никак не думал, что столь матёрый профи скатится до такой пакости.
      Если взять csv.php за основу, то на раз-два можно организовать хоть импорт из Excel, хоть из XML, хоть из YML.
        Fi1osof
        09 января 2016, 14:09
        0
        Вы сколько импортеров из XML написали с нуля? Из csv.php для этих целей можно будет взять буквально одну строчку: $modx->runProcessor(). Остальное в нем — это чтение данных из CSV. Но еще раз: XML — это не CSV. CSV читается построчно, и здесь все очень просто (разве что можно наткнуться на различные разделители и кодировки, но это все решается). И даже гигабайтовый файл можно прочитать, если таймлимиты позволят. А XML — это совсем другая история. Если вы хотя бы 10-тимегабайтовый файл попробуете скушать за раз SimpleXML-ом (который позволяет более просто с этими данными работать), то у вас и 128 метров оперативки на пых вряд ли хватит, скрипт развалится. А приходилось сталкиваться и с файлами гораздо больше. Тут надо поточный XML-парсер использовать, к примеру тот же XMLReader. Но это уже разбор построчный, и это гораздо сложнее.
        Если вы понимаете о чем я, то будет вам и понятна моя реакция на вашу «помощь» топикстартеру. Вам ничего не стоит написать одну строчку такого крутейшего совета. А человек пойдет и неделю сейчас без толку убьет.
        Хотите мне возразить? Выкатите свой готовый XML-импортер, даже если он платный будет.
          Михаил Божко
          09 января 2016, 14:28
          1
          +2
          20-26 Мбайт спокойно импортировал.
          Да-да, теперь на вашем импортёре свет клином сошёлся. Советы других — мусор.
          Может ТС нужно импортнуть один раз 1000 позиций — зачем ему платный инструмент? Проще на скорую руку накропать свой.

          И делал я всё очень просто:
          $xpath_expression = '//mysqldump/database/table_data/row/field';
          $xml = new DOMDocument();
          $xml->load($file);
          $xpath = new DOMXPath($xml);
          $nodes = $xpath->query($xpath_expression);
          а далее цикл.
          И смещение присутствует, чтобы скрипт по таймауту не отваливался.
          На beget и timeweb на ура работает, не говоря уже про VPS.
            Fi1osof
            09 января 2016, 15:00
            0
            Советы других не мусор. Но вот это сложно за совет принять: «Подправить файл csv.php, и будет тебе счастье;-)».
            Это из серии «Подправьте чистый MODX, и вы получите крутой сайт».
            Вот то, что вы сейчас написали, это больше походит на совет. А если вы это еще и в готовое решение оформите, это будет уже вообще респект. Тем более, что видимо для вас не составит это труда.

            На моем импортере свет клином не сошелся. Но, во-первых, в нем не только чтение, но и пошаговость, и готовый Ajax-интерфейс.
            Второе — унифицированные таблицы для временных данных.
            Третье — несколько тысяч товаров он как запросто кушает. joxi.ru/a2XVypGuyDnW0r
            Так что кому-то он сможет больше пригодиться, чем просто совет.

            P.S. Чуть позже опубликую релиз. Но вы все равно соберите и выложите свой пакет, он наверняка много кому пригодится.
              Fi1osof
              09 января 2016, 15:01
              0
              P.P.S. ваш вариант тоже скорее всего возьму за основу для отдельного ридера. Спасибо.
    Fi1osof
    09 января 2016, 13:38
    0
    Если еще не победили эту задачу, на следующей недели опубликую новый пакет. Это довольно универсальный импортер, с довольно приятными плюшками. Там помимо прочего будет и выгрузка из 1С/XML. Будет пакет стоить для начала 1500 рублей. Но вам бонусом могу предложить помощь в настройке именно под ваш проект (чтобы полноценный YML-парсер добавить).
    Интрига: joxi.ru/823OeZKC6D13l2
      Марк Валерич
      09 января 2016, 15:19
      0
      Николай, Михаил, спасибо за ответы.

      Николай, меня заинтересовало это дополнение, только вот есть пара вопросов.

      1. В силу того, что давно перешел с shopkeepera на minishop будет ли сделана выгрузка в таблицы minishop2?
      2. Или будет возможна только загрузка в shopmodx?
        Fi1osof
        09 января 2016, 15:23
        0
        Создание/обновление документов будет через родные процессоры MODX-а (resource/create | resource/update). Поэтому импортировать можно что угодно во что угодно, в том числе и в минишоп/шопкипер. Вообще мы сейчас ориентируемся именно на универсальность.
          Fi1osof
          11 января 2016, 21:49
          0
          Опубликовал анонс modx.pro/solutions/7559-component-modimporter-import-setting-on-the-website/
          Завтра пакет должен уже быть опубликован, модерацию он прошел.
          Марк Валерич
          09 января 2016, 15:27
          0
          а будет ли возможность поюзать этот пакет в демо версии?
          Обновление каталога будет требоваться постоянное, тк этот сайт будет обновляться регулярно, но исходный yml будет давать другой сайт.
            Fi1osof
            09 января 2016, 15:37
            0
            Нет, демо-версии не будет, так как вы правильно говорите, что исходные файлы будут разные, и даже если мы дадим пользователям возможность залить свои файлы для теста, не факт, что они корректно распарсятся (хотя ShopModx1C довольно нормально дергал основную информацию, включая картинки, не раз его использовали). Но информационную поддержку в настройке под свои нужды будем гарантировать. А так, в случае с тем же XML, у нас описывается схема для парсинга (будет вынесено в конфиги, где в JSON описать можно будет), например:
            $schema = array(
            «КоммерческаяИнформация» => array(
            «Каталог» => array(
            «Товары» => array(
            «Товар» => array(
            «parse» => true,
            ),
            ),
            ),
            ),
            );
            То есть даже если у вас не стандартная разметка, ридер легко адаптируется под нужную структуру.
              Марк Валерич
              09 января 2016, 15:41
              0
              на почту в личку отправил ссылку с файлом.
              Планируется именно он.
                Fi1osof
                09 января 2016, 15:44
                0
                Да, получил. Щас поиграюсь и отвечу.
                  Fi1osof
                  09 января 2016, 17:17
                  +1
                  Вот ваш файл для импорта: gist.github.com/Fi1osof/05159325add272ef3640
                  Сами решите сложный он для вас или нет.
                  Сейчас прописано только чтение категорий и товаров (и из них только основные данные). Добавить чтение остальных полей — дело техники.
                  Заодно пару логических ошибок у себя поправил и добавил пошаговость при импорте товаров. Вот результат импорта: joxi.ru/LmGVQx0uRJQR3r
                  Как видите, все ваши категории он прочитал и сохранил в БД за 9 секунд. На то же самое для 1000 товаров уходит ~2 сек.
                  Итого 562 категории и 19829 товаров.
                  joxi.ru/a2XVypGuyDE13r
                  Железо: 2 ядра, 1Гб, SATA. Стандартные настройки.
                    Марк Валерич
                    09 января 2016, 17:23
                    0
                    Спасибо, то есть компонент, который вы приготовите, сможет обработать данный файл?
                      Fi1osof
                      09 января 2016, 17:30
                      0
                      Он уже обрабатывает данный файл. Это ваш расширяющий процессор. То есть компонент задает общую логику и функционал (а это уже более 1000 строк php + JS-клиент). По мере того, как компонент будет докручиваться, объем кода в подобных расширяющих процессорах будет доходить до нуля. Свои преобразования можно будет выполнять и на уровне плагинов на создание/обновление документов.
                      Конечно объекты, плагины и т.п. — все это более тяжеловесно, но именно для этого и была поставлена важная задача — пошаговость выполнения. Таким образом и 100 000 товаров можно будет импортировать без особых проблем. Но зато будет полная гибкость в управлении импортом и универсальность под индивидуальные проекты. К примеру, если у вас на создание товаров имеется какой-то плагин (обрезающий картинки или типа того), импорту об этом можно ничего не знать. Он отправляет голые данные на процессор сохранения товара, там уже вызываются все стандартные события и срабатывают ваши плагины.
              Илья
              13 июля 2018, 10:54
              0
              Аналогичный вопрос как у ТСа.
              Есть на данный момент что-то рабочее?

              Задача стоит именно в создании каталога/категорий/товаров в ms2 из yml.
              Буду благодарен за наводку.
                Алексей Шумаев
                13 июля 2018, 11:29
                1
                0
                Готового не знаю, не нужен (т.к. часто нужны уникальные обработки под проект).
                Я использую свой класс на основе:
                $data = file_get_contents($xmlFile);
                 $xml = @simplexml_load_string($data);
                 $list = json_decode(json_encode($xml),1);
                foreach ($list['элемент'] as $items) {
                // тут нужные обработки и запуск процессоров на добавление/обновление
                }
                Ничего сложного, я советую один раз сделать самому и потом использовать в работе как заготовку, чем постоянно настраивать/править готовое решение.
                Если нужно, могу скелет класса набросать.
                  Sergey (Sentinel)
                  25 марта 2019, 19:57
                  0
                  Очень нужно, набросайте плиз…
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                21