[СДЕЛАЙ САМ] Импорт товаров MiniShop2 из xml фида Яндекс.Маркета
Приветствую! За последний месяц второй раз прилетает задача сделать импорт товаров из фида Яндекс.Маркета. Может быть я не один такой, поэтому делюсь своим решением.
Возможности
1. Импорт дерева категорий (ВАЖНО! категории в файле должны быть расположены сверху вниз в порядке увеличения уровня вложенности);
2. Импорт товаров (*есть возможность указать соответствие полей товара в файле и на сайте в свойстве конфигурации «productFields»);
3. Импорт опций товаров из тэгов «param» (опции создаются автоматически);
4. Импорт галереи товаров из тэгов «picture»;
5. Импорт производителей (*есть возможность указать соответствие полей производителя в файле и на сайте в свойстве конфигурации «vendorFields»);
*если нужно передать значение для которого не предусмотрен отдельный тэг, то следует использовать тэг param, при этом в качестве соответствия нужно указывать содержимое атрибута «name» с префиксом «name_». Например вы хотите передать логотип производителя
Импорт других сущностей не поддерживается, но при желании можете дописать.
Быстрый старт
1. Скачать из этого репозитория файлы «importfeed.class.php» и «importconfig.inc.php».
2. Выставить необходимые настройки в файле «importconfig.inc.php».
3. Установить компонент ExtraFields и создать с его помощью поле «feed_id».
4. Запустить через терминал или по CRON файл «importfeed.class.php», используя php>= 7.4.
Особенности
1. Скачанные файлы должны находится в папке «core/elements» иначе нужно менять путь к корневому файлу «index.php»;
2. В конфигурации установлен шаг в 100 ресурсов, его можно изменить, но это способно привести к ошибке с нехваткой памяти при большом количестве товаров. Рекомендую повесить запуск на крон и ставить ша не более 500.
3. Пока работает скрипт не удаляйте файл readingdata.json в нём хранится информация о последней завершённой итерации. Данный файл будет автоматически удалён после завершения всех импортов.
4. После завершения всех импортов будет создан файл importfinished.txt, который не позволит запустить импорт повторно в автоматическом режиме. Соответственно, если нужно запустить импорт снова, удалите этот файл.
5. Ресурсы создаются без использования процессоров, поэтому никакие плагины на события типа OnDocFormSave и других не сработают. Так сделано для ускорения процесса и потому что задача не обязывала использовать процессоры.
6. Все фото добавленные в галерею будут удалены из исходной папки, потому что дубли никому не нужны.
Возможные ошибки.
1. Дубли в названиях могут привести к ошибке превышения объёма памяти или «Segmentation fault» (чтобы это ни значило). Есть два варианта решения, либо вручную исправить проблемные названия, либо в файле конфигурации установить свойству «createUniquePagetitle» значение true.
2. Проблемы с загрузкой картинок в формате WEBP. Галерея минишопа выдаёт ошибку «Не верный формат файла». Добавление формата в разрешённые в источнике файлов проблему не решило.
Отслеживание ошибок.
В скрипт встроено подробное логирование, информация о ходе выполнения пишется в файл «import_log.txt». так же скрипт можно выполнять поэтапно задав начальную и конечную позицию в файле «readingdata.json».
Поблагодарить автора, а также немного порадовать других активных участников сообщества можно, отправив донат одним из следующих способов
Возможности
1. Импорт дерева категорий (ВАЖНО! категории в файле должны быть расположены сверху вниз в порядке увеличения уровня вложенности);
2. Импорт товаров (*есть возможность указать соответствие полей товара в файле и на сайте в свойстве конфигурации «productFields»);
3. Импорт опций товаров из тэгов «param» (опции создаются автоматически);
4. Импорт галереи товаров из тэгов «picture»;
5. Импорт производителей (*есть возможность указать соответствие полей производителя в файле и на сайте в свойстве конфигурации «vendorFields»);
*если нужно передать значение для которого не предусмотрен отдельный тэг, то следует использовать тэг param, при этом в качестве соответствия нужно указывать содержимое атрибута «name» с префиксом «name_». Например вы хотите передать логотип производителя
<param name="ЛогоВендора">https://art-sites.ru//assets/components/phpthumbof/cache/logo-icon-w.4113b3f984c288dac851d68881c111ed.webp</param>
в этом случае в свойстве «vendorFields» должна быть такая запись'vendorFields' => [
...
'logo' => 'name_ЛогоВендора',
...
]
Импорт других сущностей не поддерживается, но при желании можете дописать.
Быстрый старт
1. Скачать из этого репозитория файлы «importfeed.class.php» и «importconfig.inc.php».
2. Выставить необходимые настройки в файле «importconfig.inc.php».
3. Установить компонент ExtraFields и создать с его помощью поле «feed_id».
4. Запустить через терминал или по CRON файл «importfeed.class.php», используя php>= 7.4.
Особенности
1. Скачанные файлы должны находится в папке «core/elements» иначе нужно менять путь к корневому файлу «index.php»;
2. В конфигурации установлен шаг в 100 ресурсов, его можно изменить, но это способно привести к ошибке с нехваткой памяти при большом количестве товаров. Рекомендую повесить запуск на крон и ставить ша не более 500.
3. Пока работает скрипт не удаляйте файл readingdata.json в нём хранится информация о последней завершённой итерации. Данный файл будет автоматически удалён после завершения всех импортов.
4. После завершения всех импортов будет создан файл importfinished.txt, который не позволит запустить импорт повторно в автоматическом режиме. Соответственно, если нужно запустить импорт снова, удалите этот файл.
5. Ресурсы создаются без использования процессоров, поэтому никакие плагины на события типа OnDocFormSave и других не сработают. Так сделано для ускорения процесса и потому что задача не обязывала использовать процессоры.
6. Все фото добавленные в галерею будут удалены из исходной папки, потому что дубли никому не нужны.
Возможные ошибки.
1. Дубли в названиях могут привести к ошибке превышения объёма памяти или «Segmentation fault» (чтобы это ни значило). Есть два варианта решения, либо вручную исправить проблемные названия, либо в файле конфигурации установить свойству «createUniquePagetitle» значение true.
2. Проблемы с загрузкой картинок в формате WEBP. Галерея минишопа выдаёт ошибку «Не верный формат файла». Добавление формата в разрешённые в источнике файлов проблему не решило.
Отслеживание ошибок.
В скрипт встроено подробное логирование, информация о ходе выполнения пишется в файл «import_log.txt». так же скрипт можно выполнять поэтапно задав начальную и конечную позицию в файле «readingdata.json».
Поблагодарить автора, а также немного порадовать других активных участников сообщества можно, отправив донат одним из следующих способов
- На карту Тинькофф www.tinkoff.ru/sl/2V9U9RrcJZP
- На YooMoney yoomoney.ru/fundraise/RPkkYwNcL7A.230131
- На Qiwi кошелек qiwi.com/p/77012827737
- Казахстан Каспи по номеру +7 701 282 77 37
Поблагодарить автора
Отправить деньги