Impex — компонент импорта/экспорта ресурсов MODX и товаров miniShop

Всем привет!

Позвольте представить компонент 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 всех импортированных ресурсов
Примеры использования можно поcмотреть в документации, и плагине «Impex».

Компонент уже доступен в магазине.

Предвосхищая вопросы по версии для MODX3 с поддержкой miniShop3, отвечу, что она готова на 99% и в скором времени будет представлена уважаемой публике ).
UPD
Impex3 для MODX3 (тестировался на 1.0.0-alfa) с поддержкой miniShop3 также доступен.

Павел Романов
09 декабря 2024, 12:58
modx.pro
395
+10

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0