Загрузка в minishop2 из yml
Добрый вечер, коллеги.
С праздником, с рождеством!..
Нужен совет-подсказка.
Как создать каталог товаров в minishop2 из файла xml, yml?
С праздником, с рождеством!..
Нужен совет-подсказка.
Как создать каталог товаров в minishop2 из файла xml, yml?
Комментарии: 21
Подправить файл csv.php, и будет тебе счастье;-)
Вы серьезно? По вашему разница между CSV и XML такая ничтожная?
Никак не думал, что столь матёрый профи скатится до такой пакости.
Если взять csv.php за основу, то на раз-два можно организовать хоть импорт из Excel, хоть из XML, хоть из YML.
Если взять csv.php за основу, то на раз-два можно организовать хоть импорт из Excel, хоть из XML, хоть из YML.
Вы сколько импортеров из XML написали с нуля? Из csv.php для этих целей можно будет взять буквально одну строчку: $modx->runProcessor(). Остальное в нем — это чтение данных из CSV. Но еще раз: XML — это не CSV. CSV читается построчно, и здесь все очень просто (разве что можно наткнуться на различные разделители и кодировки, но это все решается). И даже гигабайтовый файл можно прочитать, если таймлимиты позволят. А XML — это совсем другая история. Если вы хотя бы 10-тимегабайтовый файл попробуете скушать за раз SimpleXML-ом (который позволяет более просто с этими данными работать), то у вас и 128 метров оперативки на пых вряд ли хватит, скрипт развалится. А приходилось сталкиваться и с файлами гораздо больше. Тут надо поточный XML-парсер использовать, к примеру тот же XMLReader. Но это уже разбор построчный, и это гораздо сложнее.
Если вы понимаете о чем я, то будет вам и понятна моя реакция на вашу «помощь» топикстартеру. Вам ничего не стоит написать одну строчку такого крутейшего совета. А человек пойдет и неделю сейчас без толку убьет.
Хотите мне возразить? Выкатите свой готовый XML-импортер, даже если он платный будет.
Если вы понимаете о чем я, то будет вам и понятна моя реакция на вашу «помощь» топикстартеру. Вам ничего не стоит написать одну строчку такого крутейшего совета. А человек пойдет и неделю сейчас без толку убьет.
Хотите мне возразить? Выкатите свой готовый XML-импортер, даже если он платный будет.
20-26 Мбайт спокойно импортировал.
Да-да, теперь на вашем импортёре свет клином сошёлся. Советы других — мусор.
Может ТС нужно импортнуть один раз 1000 позиций — зачем ему платный инструмент? Проще на скорую руку накропать свой.
И делал я всё очень просто:
И смещение присутствует, чтобы скрипт по таймауту не отваливался.
На beget и timeweb на ура работает, не говоря уже про VPS.
Да-да, теперь на вашем импортёре свет клином сошёлся. Советы других — мусор.
Может ТС нужно импортнуть один раз 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.
Советы других не мусор. Но вот это сложно за совет принять: «Подправить файл csv.php, и будет тебе счастье;-)».
Это из серии «Подправьте чистый MODX, и вы получите крутой сайт».
Вот то, что вы сейчас написали, это больше походит на совет. А если вы это еще и в готовое решение оформите, это будет уже вообще респект. Тем более, что видимо для вас не составит это труда.
На моем импортере свет клином не сошелся. Но, во-первых, в нем не только чтение, но и пошаговость, и готовый Ajax-интерфейс.
Второе — унифицированные таблицы для временных данных.
Третье — несколько тысяч товаров он как запросто кушает. joxi.ru/a2XVypGuyDnW0r
Так что кому-то он сможет больше пригодиться, чем просто совет.
P.S. Чуть позже опубликую релиз. Но вы все равно соберите и выложите свой пакет, он наверняка много кому пригодится.
Это из серии «Подправьте чистый MODX, и вы получите крутой сайт».
Вот то, что вы сейчас написали, это больше походит на совет. А если вы это еще и в готовое решение оформите, это будет уже вообще респект. Тем более, что видимо для вас не составит это труда.
На моем импортере свет клином не сошелся. Но, во-первых, в нем не только чтение, но и пошаговость, и готовый Ajax-интерфейс.
Второе — унифицированные таблицы для временных данных.
Третье — несколько тысяч товаров он как запросто кушает. joxi.ru/a2XVypGuyDnW0r
Так что кому-то он сможет больше пригодиться, чем просто совет.
P.S. Чуть позже опубликую релиз. Но вы все равно соберите и выложите свой пакет, он наверняка много кому пригодится.
P.P.S. ваш вариант тоже скорее всего возьму за основу для отдельного ридера. Спасибо.
Если еще не победили эту задачу, на следующей недели опубликую новый пакет. Это довольно универсальный импортер, с довольно приятными плюшками. Там помимо прочего будет и выгрузка из 1С/XML. Будет пакет стоить для начала 1500 рублей. Но вам бонусом могу предложить помощь в настройке именно под ваш проект (чтобы полноценный YML-парсер добавить).
Интрига: joxi.ru/823OeZKC6D13l2
Интрига: joxi.ru/823OeZKC6D13l2
Николай, Михаил, спасибо за ответы.
Николай, меня заинтересовало это дополнение, только вот есть пара вопросов.
1. В силу того, что давно перешел с shopkeepera на minishop будет ли сделана выгрузка в таблицы minishop2?
2. Или будет возможна только загрузка в shopmodx?
Николай, меня заинтересовало это дополнение, только вот есть пара вопросов.
1. В силу того, что давно перешел с shopkeepera на minishop будет ли сделана выгрузка в таблицы minishop2?
2. Или будет возможна только загрузка в shopmodx?
Создание/обновление документов будет через родные процессоры MODX-а (resource/create | resource/update). Поэтому импортировать можно что угодно во что угодно, в том числе и в минишоп/шопкипер. Вообще мы сейчас ориентируемся именно на универсальность.
Опубликовал анонс modx.pro/solutions/7559-component-modimporter-import-setting-on-the-website/
Завтра пакет должен уже быть опубликован, модерацию он прошел.
Завтра пакет должен уже быть опубликован, модерацию он прошел.
а будет ли возможность поюзать этот пакет в демо версии?
Обновление каталога будет требоваться постоянное, тк этот сайт будет обновляться регулярно, но исходный yml будет давать другой сайт.
Обновление каталога будет требоваться постоянное, тк этот сайт будет обновляться регулярно, но исходный yml будет давать другой сайт.
Нет, демо-версии не будет, так как вы правильно говорите, что исходные файлы будут разные, и даже если мы дадим пользователям возможность залить свои файлы для теста, не факт, что они корректно распарсятся (хотя ShopModx1C довольно нормально дергал основную информацию, включая картинки, не раз его использовали). Но информационную поддержку в настройке под свои нужды будем гарантировать. А так, в случае с тем же XML, у нас описывается схема для парсинга (будет вынесено в конфиги, где в JSON описать можно будет), например:
$schema = array(То есть даже если у вас не стандартная разметка, ридер легко адаптируется под нужную структуру.
«КоммерческаяИнформация» => array(
«Каталог» => array(
«Товары» => array(
«Товар» => array(
«parse» => true,
),
),
),
),
);
на почту в личку отправил ссылку с файлом.
Планируется именно он.
Планируется именно он.
Да, получил. Щас поиграюсь и отвечу.
Вот ваш файл для импорта: gist.github.com/Fi1osof/05159325add272ef3640
Сами решите сложный он для вас или нет.
Сейчас прописано только чтение категорий и товаров (и из них только основные данные). Добавить чтение остальных полей — дело техники.
Заодно пару логических ошибок у себя поправил и добавил пошаговость при импорте товаров. Вот результат импорта: joxi.ru/LmGVQx0uRJQR3r
Как видите, все ваши категории он прочитал и сохранил в БД за 9 секунд. На то же самое для 1000 товаров уходит ~2 сек.
Итого 562 категории и 19829 товаров.
joxi.ru/a2XVypGuyDE13r
Железо: 2 ядра, 1Гб, SATA. Стандартные настройки.
Сами решите сложный он для вас или нет.
Сейчас прописано только чтение категорий и товаров (и из них только основные данные). Добавить чтение остальных полей — дело техники.
Заодно пару логических ошибок у себя поправил и добавил пошаговость при импорте товаров. Вот результат импорта: joxi.ru/LmGVQx0uRJQR3r
Как видите, все ваши категории он прочитал и сохранил в БД за 9 секунд. На то же самое для 1000 товаров уходит ~2 сек.
Итого 562 категории и 19829 товаров.
joxi.ru/a2XVypGuyDE13r
Железо: 2 ядра, 1Гб, SATA. Стандартные настройки.
Спасибо, то есть компонент, который вы приготовите, сможет обработать данный файл?
Он уже обрабатывает данный файл. Это ваш расширяющий процессор. То есть компонент задает общую логику и функционал (а это уже более 1000 строк php + JS-клиент). По мере того, как компонент будет докручиваться, объем кода в подобных расширяющих процессорах будет доходить до нуля. Свои преобразования можно будет выполнять и на уровне плагинов на создание/обновление документов.
Конечно объекты, плагины и т.п. — все это более тяжеловесно, но именно для этого и была поставлена важная задача — пошаговость выполнения. Таким образом и 100 000 товаров можно будет импортировать без особых проблем. Но зато будет полная гибкость в управлении импортом и универсальность под индивидуальные проекты. К примеру, если у вас на создание товаров имеется какой-то плагин (обрезающий картинки или типа того), импорту об этом можно ничего не знать. Он отправляет голые данные на процессор сохранения товара, там уже вызываются все стандартные события и срабатывают ваши плагины.
Конечно объекты, плагины и т.п. — все это более тяжеловесно, но именно для этого и была поставлена важная задача — пошаговость выполнения. Таким образом и 100 000 товаров можно будет импортировать без особых проблем. Но зато будет полная гибкость в управлении импортом и универсальность под индивидуальные проекты. К примеру, если у вас на создание товаров имеется какой-то плагин (обрезающий картинки или типа того), импорту об этом можно ничего не знать. Он отправляет голые данные на процессор сохранения товара, там уже вызываются все стандартные события и срабатывают ваши плагины.
Аналогичный вопрос как у ТСа.
Есть на данный момент что-то рабочее?
Задача стоит именно в создании каталога/категорий/товаров в ms2 из yml.
Буду благодарен за наводку.
Есть на данный момент что-то рабочее?
Задача стоит именно в создании каталога/категорий/товаров в ms2 из yml.
Буду благодарен за наводку.
Готового не знаю, не нужен (т.к. часто нужны уникальные обработки под проект).
Я использую свой класс на основе:
Если нужно, могу скелет класса набросать.
Я использую свой класс на основе:
$data = file_get_contents($xmlFile);
$xml = @simplexml_load_string($data);
$list = json_decode(json_encode($xml),1);
foreach ($list['элемент'] as $items) {
// тут нужные обработки и запуск процессоров на добавление/обновление
}
Ничего сложного, я советую один раз сделать самому и потом использовать в работе как заготовку, чем постоянно настраивать/править готовое решение.Если нужно, могу скелет класса набросать.
Очень нужно, набросайте плиз…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.