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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Пример:
Саморезы (папка)
— Саморез кровельный DIN777 (папка)
— — Саморез кровельный DIN777 5х100 (товар)
— — Саморез кровельный DIN777 5х150 (товар)
— — Саморез кровельный DIN777 5х200 (товар)
А по факту это все характеристики.
Fi1osofПо вашему случаю: берите, помогу настроить. Судя по всему у вас можно оттолкнуться от вложенности — если у этой папки нет подпапок, то это товар. А товары прогружать как вариации к товарам. Это не сложно сделать. В том же приведенном примере есть исключение первого уровня (там по сути были производители, и они не нужны были в корне каталога на сайте).
Категории-папки пойдут во временной таблице с типом category, Категории-товары — product, Товары-вариации — variable. У каждого будет свой артикул и parent. По товару-вариации, к примеру, легко получить сам товар.
Fi1osofFi1osofСоздается только 3 новых сущности:
1. Расширяющий процессор, реализующий тонкости именно вашего импорта.
2. Контроллер, в котором прописан вызов этого вашего процессора.
3. Пункт меню, ссылающийся на ваш контроллер.
Приведите код вашего переопределяющего метода StepWriteTmpData.
Fi1osofFi1osofFi1osofFi1osofFi1osofFi1osofP.S. скоро добавлю кнопку «Продолжить выполнение», чтобы можно было запустить дальше прервавшийся импорт.
Fi1osofВообще имеет смысл ввести проверку не только по указанному лимиту товаров, но и по уже затраченному времени, чтобы при близком пороге так же отправлять дальше на пошаговое выполнение. Скоро тоже сделаю это.