Компонент msImportExport предназначен для импорта/экспорта товаров MiniShop 2 (не ниже 2.4.*) на сайт из/в CSV/XLSX, а также экспорт в Яндекс.Маркет. Начиная с версии 2, компонент стал поддерживать импорт и обычных ресурсов.
Компонент платный (на момент написания, стоит 3990 р). Ссылка на компонент и его документацию. Смотрите также как покупать и устанавливать платные пакеты с modstore.pro.
Компонент может работать и с товарными категориями — для информации, а показывать буду на примере товаров.
Работа с дополнением msImportExport v 1
Данная версия мне нравилась и нравится больше, но она не работает с обычными ресурсами, к стати вам могут установить и ее, для этого нужно написать в ТП плагина.
В прошлых уроках мы создали каталог с офертами на Minishop2 и спарсили контент с сайта конкурента, ну а сегодня импортируем его.
Перед тем как начать, рекомендую сначала выгрузить наши товары со всеми опциями и TV полями, чтобы подогнать наш спаршеный товар под нее — за одно и в дальнейшем пригодиться скорее всего.
Экспорт товаров на ПК
Для этого идем в Пакеты — msImportExport — Экспорт. На открывшейся странице переходим во вкладку «Настройка экспорта».

Проматываем немного страницу там увидите пункты: Добавлять описание полей и Абсолютные пути у изображений ставим Да.

Еще немного проматываем вниз, там увидите заголовок «Поля для экспорта», там ниже выбираем Тип экспорта: Экспортировать товары, в Список настроек полей: выбираем «export».

Если списка по умолчанию нет, тогда создайте его самостоятельно нажав на шестеренку.
Теперь нужно добавить в этот список все нужные поля (и заменить ненужное), для этого напротив количество ставим к примеру 10 и нажимаем «Добавить».

Теперь отредактируем первые 3 строки и добавим новые, в первые строки рекомендую делать такими: id, Категория — parent, Показывать в категориях. А все остальное уже что нужно, в конечном итоге должно получиться что то типа такого.

и сохраняем настройки.
Теперь можно выгрузить EXCEL с наполненными товарами на ПК. Для этого переходим во вкладку «Экспорт товаров», выбираем:
- Тип экспорта: Экспортировать товары.
- Экспортировать в: XLSX Файл.
- Список настроек полей: export (это то что сейчас на страивали).
И жмем по кнопке «Экспортировать».

После этого компонент экспортирует все товары с их опциями и TV полями в excel. Сохраняем его

и открываем.

Теперь в эту таблицу добавляем новые товары (я добавлю спаршенные в прошлом уроке — недостающие поля внесу вручную) и сохраняем.
Импорт товаров из Excel (наполнение minishop2)
Приключаемся в Импорт, идем на вкладку «Настройки импорта». Далее выставляем следующие настройки:
- Ключ товара, по которому определяется его уникальность: Название — pagetitle.
- Базовый родительский каталог: главный каталог товаров.
- Шаблон для категорий: ваш шаблон который используется для категорий.
- Игнорировать первую строку: Да (чтобы не импортировались названия столбцов.
- Остальное по своему усмотрению.

Если все это делаете первый раз можете включить Режим отладки — тогда плагин импортирует только 1 товар, смотрите если все нормально то отключаем потом, либо в первый раз не добавляйте для импорта много товаров.
Сохраняем настройки и переходим во вкладку «Импорт» выбираем Тип импорта: Импорт товаров и загружаем нашу эксель таблицу с данными товаров.

После загрузки файла появятся Настройка полей, нам нужно создать настройку с именем import. Щелкаем по шестеренке, в сплывающем окне пишем название «import», указываем Ключ товара, по которому определяется его уникальность: pagetitle и сохраняем.

После сохранения закрываем это окно всплывающее.
Далее в «Список настроек полей:» указываем нашу только что созданную конфигурацию, после чего сопоставляем поля правого столбца с левым и сохраняем настройки.

Поле ID игнорирую т.к. импортирую новые товары — у них нет еще ID (данное поле в дальнейшем понадобиться для обновления товаров).
Да и эти все настройки делаются 1 раз (если сразу правильно сделаете) — так что не пугайтесь.
После сохранения пробегитесь по правим столбцам, если все нормально, можно начать импорт, нажав соответствующую кнопку.

Далее ждем пока дополнение импортирует все данные и покажет отчет.

Обновление товаров из Excel
Хотите быстро внести данные в товары или хотите обновить какие-нибудь TV поля или опции? Без проблем! Экспортируем товары, правим, обратно импортируем, только в настройках импорта: Ключ товара, по которому определяется его уникальность: лучше выбрать ID (вместо pagetitle).
Работа с дополнением msImportExport v 2
Вторая версия типа более продвинутая, т.к. работает с ресурсами и некоторыми другими данными, это теперь не единый пакет, а пакет + дополнительные пакеты, которые выбираются при установке (или переустановке).

Так же пакет теперь не работает сразу после его установки, в отличии от 1й его версии. Нам теперь нужно производить доп манипуляции. Для этого идем в его системные настройки:

Указываем там путь к php интерпретатору, можете спросить его в ТП хостинга, после этого сохраняете и нажимаете проверить. Если указали его правильно, нижние пункты обычно зеленеют.

Далее нам нужно, чтобы появились активные наблюдатели, для этого на стороне хостинга необходимо настроить cron.
Покажу как это делается на хостинге с cPanel:
В с cPanel идем в раздел Расширенный -> Задания cron.

На открывшейся странице добавляем новое задание cron, выставляем периодичность раз в минуту, в поле команда прописываем: путь к php интерпретатору пробел, путь к скрипту из системных настроек плагина и жмем по кнопке «Добавить новое задание cron».

Ждем минуту, и в настройках плагина снова жмем проверить:
У вас должен появится как минимум 1 наблюдатель, затем появятся и остальные:

После этого можно работать, да к стати забыл сказать, если на вашем хостинге разрешены «демон» процессы (обычно разрешены), включите эту настройку (находится в самом низу).

Если все настроили правильно, а активные наблюдатели не появляются или еще что то в этом духе, пишите в ТП плагина.
Ну а импорт и экспорт +- аналогичен предыдущей версии, думаю особого смыла описывать его нет.
Экспорт полей из MIGX
Для того, чтобы импортировать поля из MIGX, нужно написать свой плагин, вот пример кода:
<?php
/**
* @var modX $modx
* @var int $preset
* @var string $section
* @var array $fields
* @var array $srcData
* @var array $destData
*/
// Массив ID настроек полей для которых нужно использовать данный плагин
$presets = array(1,2);
if (!empty($presets) && !in_array($preset, $presets)) return;
switch ($modx->event->name) {
case 'msieOnExportBeforePrepareRow':
if ($section == 'data') {
$keys = array_flip($fields);
$tvs = array('tv.other_img','tv.tags'); // список TV полей через запятую которые следует преобразовать в строку (обязательно добавлять префикс tv.)
foreach ($tvs as $tv) {
if (!isset($keys[$tv]) || empty($srcData[$tv])) continue;
$index = $keys[$tv];
$destData[$index] = json_encode($srcData[$tv], JSON_UNESCAPED_UNICODE);
}
$modx->event->returnedValues['destData'] = $destData;
}
break;
}
И повесить его на событие msieOnExportBeforePrepareRow.

Не забудьте в нем прописать свои TV поля (заменить мои). После этого в настройке пресета (я обычно создаю для них отдельный, с некоторыми общими полями, чтобы можно было потом объединить) на вкладке Опции -> Общие, в поле Пропустить разбор полей указываем их через запятую:

После этого, вместо пустоты у вас должны появится данные.

Выводы
msImportExport отличный компонент который ускоряем рутинные операции (загрузка товаров или категорий, их обновление и т.д.) и он стоит своих денег. Поэтому рекомендую ее к покупке. Если вы серьёзно изначально подошли к разработке, проанализировали конкурентов, создали дерево сайта, собрали ключи и т.д. Тогда если откинуть верстку, то все категории и товары можно очень быстро выгрузить — а не тратить на это месяца.










Здравствуйте. Не могли бы вы сделать обзор, по настройке msImportExport 2.0.
В документации только видео. С помощью которого многие вещи не получаются. А просматривать 50мин ради одной настройки из за которой не работает. Утомительное занятие.
Заранее спасибо.
Дописал про настройку версии 2
Подскажите — есть прайс который обновляется раз в сутки
Можно ли с помощью вашего компонента как то настроить чтобы он скрывал карточки (по артикулу) тех товаров которых НЕТ в прайсе? Заранее спасибо
Компонент не мой, у него есть ТП) А так вроде можно, т.к. есть импорт через cron (на практике не испытывал).
Опишите, пожалуйста, порядок обновления данных у товаров более подробно. В описании компонента говорится, что ни TV ни прочие опции не обновляются штатным методом. Да и при импорте с указанием ID в качестве ключа ничего хорошего не получается (создается новый товар)
При импорте с указанием ID в качестве ключа ничего хорошего не получается (создается новый товар) — не создается новых товаров, постоянно так обновляю товары. Уникальный ключ выбирайте ID.