modImporter. Настройка импорта в minishop2 из 1С
В прошлой статье я писал про импорт из Excel/XLSX. Вчера-сегодня мы настраивали выгрузку из 1С. Правда по этому проекту пока не настраивали прямую выгрузку на сайт непосредственно из 1С (а просто загружали сформированный одинэской файл), но проблем с этим не должно быть, modImporter изначально имел в себе механизмы работы с 1С и до этого не раз тесты проводились успешно. К слову сказать, сейчас мы взялись переносить довольно крупный магазин с битрикса на MODX, так что в ближайшем будущем 1С-импорт будет прокачен как следует, в том числе и выгрузка заказов с сайта в саму 1С и обновление статусов заказов на сайте со стороны 1С.
В этот раз мы выполняли полный импорт, включая импорт картинок товаров, цен, остатков и производителей, многоуровневая вложенность категорий и т.п. (). В итоге получилось почти 1000 строк кода, полный файл лежит здесь.
К слову о производителях: Василий, хорошо бы производителям добавить колонку Артикул, а то сейчас не за что уцепиться, чтобы завязать их с импортом по ключу. Пришлось добавить поле плагином.
И еще момент: покупайте, пока цена не выросла :) Уже отправил запрос на поднятие цены до 1990 рэ. Через неделю поднимется до 2990. Дешевле уже стоить не будет. И бесплатные консультации заканчиваются.
UPD: Если вы планируете использовать именно этот приведенный файл импорта, надо создать плагин на событие OnMODXInit (код приведен выше) и в таблице ms2_vendors дописать новую колонку externalKey varchar 36.
В этот раз мы выполняли полный импорт, включая импорт картинок товаров, цен, остатков и производителей, многоуровневая вложенность категорий и т.п. (). В итоге получилось почти 1000 строк кода, полный файл лежит здесь.
К слову о производителях: Василий, хорошо бы производителям добавить колонку Артикул, а то сейчас не за что уцепиться, чтобы завязать их с импортом по ключу. Пришлось добавить поле плагином.
$modx->loadClass('msVendor');
$modx->map['msVendor']['fields']['externalKey'] = null;
$modx->map['msVendor']['fieldMeta']['externalKey'] = array(
'dbtype' => 'varchar',
'precision' => 36,
'phptype' => 'string',
'null' => true,
'default' => null,
);
$modx->loadClass('modImporterObject');
$modx->map['modImporterObject']['fields']['vendor'] = null;
$modx->map['modImporterObject']['fieldMeta']['vendor'] = array(
'dbtype' => 'varchar',
'precision' => 36,
'phptype' => 'string',
'null' => true,
'default' => null,
);
После создания плагина надо создать колонку в msVendor. Для этого выполняем в консоли скрипт:$manager = $modx->getManager();
$manager->addField("msVendor", "externalKey");
Собственно, опять-таки много расписывать я ничего не буду (все самое ценное в представленном файле). Но если у кого вопросы возникнут — спрашивайте. И еще момент: покупайте, пока цена не выросла :) Уже отправил запрос на поднятие цены до 1990 рэ. Через неделю поднимется до 2990. Дешевле уже стоить не будет. И бесплатные консультации заканчиваются.
UPD: Если вы планируете использовать именно этот приведенный файл импорта, надо создать плагин на событие OnMODXInit (код приведен выше) и в таблице ms2_vendors дописать новую колонку externalKey varchar 36.
Комментарии: 20
Если выгрузку можно будет легко кастомизировать — беру. Ибо у большинства клиентов товары в 1с = характеристикам (размер), а сами товары — категории.
Пример:
Саморезы (папка)
— Саморез кровельный DIN777 (папка)
— — Саморез кровельный DIN777 5х100 (товар)
— — Саморез кровельный DIN777 5х150 (товар)
— — Саморез кровельный DIN777 5х200 (товар)
А по факту это все характеристики.
Пример:
Саморезы (папка)
— Саморез кровельный DIN777 (папка)
— — Саморез кровельный DIN777 5х100 (товар)
— — Саморез кровельный DIN777 5х150 (товар)
— — Саморез кровельный DIN777 5х200 (товар)
А по факту это все характеристики.
У большинства, но не у всех. Хотя на счет вариация я согласен — в том же моем подопечном на битриксе товары Товар_1 5 кг, Товар_2 10 кг, Товар_3 20 кг. То есть они и в 1С заведены отдельными позициями. Там для группировки на стороне 1С в каждом товаре прописана своя группа и первый же товар, для которого нет ни одного товара по группе, создается, а все остальные к нему вариациями идут.
По вашему случаю: берите, помогу настроить. Судя по всему у вас можно оттолкнуться от вложенности — если у этой папки нет подпапок, то это товар. А товары прогружать как вариации к товарам. Это не сложно сделать. В том же приведенном примере есть исключение первого уровня (там по сути были производители, и они не нужны были в корне каталога на сайте).
Категории-папки пойдут во временной таблице с типом category, Категории-товары — product, Товары-вариации — variable. У каждого будет свой артикул и parent. По товару-вариации, к примеру, легко получить сам товар.
По вашему случаю: берите, помогу настроить. Судя по всему у вас можно оттолкнуться от вложенности — если у этой папки нет подпапок, то это товар. А товары прогружать как вариации к товарам. Это не сложно сделать. В том же приведенном примере есть исключение первого уровня (там по сути были производители, и они не нужны были в корне каталога на сайте).
Категории-папки пойдут во временной таблице с типом category, Категории-товары — product, Товары-вариации — variable. У каждого будет свой артикул и parent. По товару-вариации, к примеру, легко получить сам товар.
Под след проект приобрету, пока что с горем пополам работает на прошлой вариации импорта. Спасибо)
Не за что.
Чтоб убрать заглушку при импорте нужно переопределить метод StepWriteTmpData? Какие еще нужно сделать изменения кроме этого файла? У меня что не получается.
Очень подробно все расписано здесь.
Создается только 3 новых сущности:
1. Расширяющий процессор, реализующий тонкости именно вашего импорта.
2. Контроллер, в котором прописан вызов этого вашего процессора.
3. Пункт меню, ссылающийся на ваш контроллер.
Приведите код вашего переопределяющего метода StepWriteTmpData.
Создается только 3 новых сущности:
1. Расширяющий процессор, реализующий тонкости именно вашего импорта.
2. Контроллер, в котором прописан вызов этого вашего процессора.
3. Пункт меню, ссылающийся на ваш контроллер.
Приведите код вашего переопределяющего метода StepWriteTmpData.
Сущности я создал. все работает. Взял файл Здесь. Как вы загружаете xml файл для импорта?
Если выгрузка из 1С идет, то там сама 1С шлет файл на сервер. Если вы вручную прогружаете, то файл надо соответственно самому загружать. Если у вас zip-архив, то в версии 1.1.1 появилась распаковка архивов joxi.ru/ZrJVWD0u1ba4Vr
Как дела продвигаются? Вопросы решились?
В данном скрине самой ошибки не видно, есть только остановившийся процесс. Пришлите мне в личку доступ к админке, я посмотрю что там у вас.
У вас просто не инсталлирован XMLReader для php joxi.ru/V2Vnk1gs0BdaQ2
Спасибо огромное все работает. А по yml есть какие то наработки?
Yml хорошо работает. Но иногда когда большой файл влетает yadi.sk/i/CyhWHpR1oRsKs. Не подскажете как настроить php и mysql на большою производительность?
У вас там по 30 товаров импортируется. Просто измените параметр на 20, если на 30-ти слетает.
P.S. скоро добавлю кнопку «Продолжить выполнение», чтобы можно было запустить дальше прервавшийся импорт.
P.S. скоро добавлю кнопку «Продолжить выполнение», чтобы можно было запустить дальше прервавшийся импорт.
Просто у вас там скорее всего картинки тоже импортируются, а они при импорте на лету минишопом пережимаются, а это отнимает не мало времени.
Вообще имеет смысл ввести проверку не только по указанному лимиту товаров, но и по уже затраченному времени, чтобы при близком пороге так же отправлять дальше на пошаговое выполнение. Скоро тоже сделаю это.
Вообще имеет смысл ввести проверку не только по указанному лимиту товаров, но и по уже затраченному времени, чтобы при близком пороге так же отправлять дальше на пошаговое выполнение. Скоро тоже сделаю это.
Как я понял по ссылке только чтение данных — могли бы вы выложить свой файл, импорта с уже настроенным сохранением?
А можно настроить cron? допустим что раз в день выгружало.
Пока из коробки этого нету, но если вы купите пакет. то поможем настроить)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.