Impex — компонент импорта/экспорта ресурсов MODX и товаров miniShop
Всем привет!
Позвольте представить компонент Impex для импорта/экспорта ресурсов MODX и товаров miniShop.
Принцип конфигурирования схож с компонентом «Catalogfill» Андрея Чиркова. Конфигурации импорта/экспорта представляют собой php-файлы в директории {core_url}components/impex/config/ (примеры идут в комплекте) такого вида:
В файле должен присутствовать массив $impex_config со следующими ключами и значениями:
Например:
С подробным описанием настроек можно ознакомиться на странице дополнения, здесь же опишу вкратце.
Для экспорта достаточно выбрать родительский ресурс в дереве, конфигурацию (нажав кнопку рядом, можно открыть файл конфигурации и отредактировать его), тип файла и нажать «Экспорт». Ссылка на созданный файл будет выведена тут же.
Для импорта необходимо выбрать родительский ресурс, конфигурацию (также можно отредактировать), загрузить и/или выбрать файл для импорта из списка (можно удалить файлы при необходимости) а также выбрать режим обработки галереи miniShop, предварительно загрузив изображения в указанную в $impex_config['content_row'] директорию-источник:
Если создание резервной копии включено, скрипт, прежде чем отправить данные на импорт, сохранит дамп контентных таблиц (список таблиц см. в документации) и выведет ссылку на него.
На вкладке можно выбрать нужную резервную копию и восстановить данные из неё.
При установке пакета создаются четыре системных события:
Компонент уже доступен в магазине.
Предвосхищая вопросы по версии для MODX3 с поддержкой miniShop3, отвечу, что она готова на 99% и в скором времени будет представлена уважаемой публике ).
UPD
Impex3 для MODX3 (тестировался на 1.0.0-alfa) с поддержкой miniShop3 также доступен.
Позвольте представить компонент Impex для импорта/экспорта ресурсов MODX и товаров miniShop.
Основные свойства
- Работа с файлами XLS/XLSX/CSV.
- Поддержка PHP 7.4, 8.*
- Конфигурирование через файлы.
- Поддержка полей товаров miniShop, включая опции категорий, производителя, галерею товара и т. д.
- Работа с MIGX-полями (настраиваемое форматирование).
- Поддержка контейнеров Collections.
- Возможность mSearch2-индексации импортированных ресурсов.
- Возможность пакетной загрузки.
- Возможность предварительного тестирования перед импортом.
- Сохранение резервной копии перед импортом и восстановление данных при необходимости.
- Системные события для плагинов.
Конфигурирование
Принцип конфигурирования схож с компонентом «Catalogfill» Андрея Чиркова. Конфигурации импорта/экспорта представляют собой php-файлы в директории {core_url}components/impex/config/ (примеры идут в комплекте) такого вида:
<?php
$impex_config['content_row'] = array(
array('Категории',5,'categories'),
array('Наименование','pagetitle','resource'),
array('Артикул','article','ms'),
array('Расширенный заголовок','longtitle','resource'),
array('Краткое описание','introtext','resource'),
array('Содержимое','content','resource'),
array('Цена','price','ms'),
array('Производитель','vendor','ms'),
array('Новинка','new','ms'),
array('Теги','tags','ms'),
array('Цвет','color','ms'),
array('Материал','material','msoption'),
array('На складе',1,'tv'),
array('Галерея','images/import/','msgallery'),
array('Дополнительные категории','','mscats'),
);
//значения по умолчанию при импорте или проверка при экспорте
$impex_config['content_default'] = array(
array('template',2),
);
// класс товаров (msProduct / modResource)
$impex_config['resource_class'] = 'msProduct';
// класс категорий (msCategory / modResource / CollectionContainer)
$impex_config['category_class'] = 'msCategory';
// по какому полю проверять соответствие товара при обновлении.
$impex_config['chk_field'] = array('article','ms');
// первая строка - названия полей
$impex_config['include_captions'] = true;
// разделители для MIGX-полей в файле array('между элементами', 'между полями внутри элемента')
$impex_config['migx_separators'] = array('||','--');
// количество ресурсов, импортируемых за один проход. 0 - не ограничивать.
$impex_config['batch_import'] = 100;
//автоматически генерировать псевдоним (alias) при импорте
$impex_config['alias_field'] = 'pagetitle';
?>
В файле должен присутствовать массив $impex_config со следующими ключами и значениями:
content_row
Настройка колонок в файле и их связь с полями и типом, где данные указываются в виде:array('Название колонки', 'ID или имя поля в базе', 'Тип данных', array('поля MIGX')),
Например:
$impex_config['content_row'] = array(
array('Категории',5,'categories'),
array('Наименование','pagetitle','resource'),
array('Артикул','article','ms'),
array('Расширенный заголовок','longtitle','resource'),
array('Краткое описание','introtext','resource'),
array('Содержимое','content','resource'),
array('Цена','price','ms'),
array('Производитель','vendor','ms'),
array('Новинка','new','ms'),
array('Теги','tags','ms'),
array('Цвет','color','ms'),
array('Материал','material','msoption'),
array('На складе',5,'tv'),
array('Характеристики','chars','migx', array('title','value')),
array('Галерея','images/import/','msgallery'),
array('Дополнительные категории','','mscats'),
);
С подробным описанием настроек можно ознакомиться на странице дополнения, здесь же опишу вкратце.
Поддерживаемые типы данных
- categories — цепочка категорий ресурса
- resource — стандартные поля ресурса MODX — pagetitle, longtitle, published и т. д.
- tv — TV-поле
- migx — TV-параметр типа MIGX
- ms — поля товара miniShop (таблица modx_ms2_products): article, price, old_price, weight, vendor, tags, new и т. д.
- msoption — Опция товара (опции категорий)
- msgallery — галерея товара miniShop
- mscats — дополнительные категории товаров miniShop (вкладка «Категории» редактора товара в админке)
Другие настройки
- content_default — значения по умолчанию при импорте и экспорте
- resource_class — класс ресурса (msProduct / modResource)
- category_class — Класс категории (msCategory / modResource / CollectionContainer)
- chk_field — поле, по которому ищется ресурс при импорте
- include_captions — первая строка в файле = названия полей
- migx_separators — разделители для MIGX-полей (настройка форматирования в файле)
- batch_import — количество ресурсов, обрабатываемых при импорте за один проход
- alias_field — какое поле использовать для генерации псевдонима при создании нового ресурса
Экспорт ресурсов
Для экспорта достаточно выбрать родительский ресурс в дереве, конфигурацию (нажав кнопку рядом, можно открыть файл конфигурации и отредактировать его), тип файла и нажать «Экспорт». Ссылка на созданный файл будет выведена тут же.
Импорт ресурсов
Для импорта необходимо выбрать родительский ресурс, конфигурацию (также можно отредактировать), загрузить и/или выбрать файл для импорта из списка (можно удалить файлы при необходимости) а также выбрать режим обработки галереи miniShop, предварительно загрузив изображения в указанную в $impex_config['content_row'] директорию-источник:
- Не обрабатывать — скрипт не будет учитывать изображения в файле.
- Загружать только новые — для новых товаров будут загружены новые изображения, для существующих товаров оставлены старые и добавлены новые, если они есть в файле и директории-источнике.
- Обновить все — для новых товаров будут загружены новые изображения, у существующих галерея сперва будет очищена, а потом загружены новые, указанные в файле, изображения.
- Тестирование. Если выбрано, после импорта откроется окно со ссылкой на системный журнал, где данные будут представлены в виде массива.
- Индексировать ли ресурс после импорта для компонента mSearch2, если он установлен в системе.
- Сохранять ли перед импортом резервную копию.
Если создание резервной копии включено, скрипт, прежде чем отправить данные на импорт, сохранит дамп контентных таблиц (список таблиц см. в документации) и выведет ссылку на него.
Восстановление из резервной копии
На вкладке можно выбрать нужную резервную копию и восстановить данные из неё.
Системные события (события плагинов)
При установке пакета создаются четыре системных события:
- OnImpexBeforeResourceExport — вызывается перед экспортом ресурса. Доступные переменные: $id — ID ресурса, $field — имя поля, $type — тип поля, $value — значение
- OnImpexBeforeResourceImport — вызывается перед импортом ресурса. Доступные переменные такие же как при экспорте
- OnImpexAfterResourceImport — вызывается после импорта ресурса. Доступен $id — ID импортированного ресурса
- OnImpexAterAllImport — вызывается после импорта всех ресурсов. Доступен массив $ids — ID всех импортированных ресурсов
Компонент уже доступен в магазине.
UPD
Impex3 для MODX3 (тестировался на 1.0.0-alfa) с поддержкой miniShop3 также доступен.