Основные свойства
- Работа с файлами XLS/XLSX/CSV.
- Поддержка PHP 7.4, 8.*
- Конфигурирование через файлы.
- Поддержка полей товаров miniShop2, включая опции категорий, производителя, галерею товара и т. д.
- Работа с MIGX-полями (настраиваемое форматирование).
- Поддержка контейнеров Collections.
- Возможность mSearch2-индексации импортированных ресурсов.
- Возможность пакетной загрузки.
- Возможность предварительного тестирования перед импортом.
- Сохранение резервной копии базы перед импортом и восстановление данных при необходимости.
- Системные события для плагинов.
Установка
Пакет устанавливается стандартным образом через установщик MODX. После установки в меню появится компонент "Impex".
Конфигурирование
Принцип конфигурирования схож с компонентом "Catalogfill" Андрея Чиркова. Конфигурации импорта/экспорта представляют собой php-файлы в директории {core_url}components/impex/config/ (примеры идут в комплекте) такого вида:
В файле должен присутствовать массив $impex_config со следующими ключами и значениями:
$impex_config['content_row']
Настройка колонок в файле и их связь с полями и типом, где данные указываются в виде: array('Название колонки', 'ID или имя поля в базе', 'Тип данных', array('поля MIGX')),
Поддерживаемые типы данных
categories
Категории ресурса. Вторым элементом массива указывается ID шаблона категории (5 в примере выше). В импортируемом файле категории должны быть представлены в виде цепочки Категория 1||Категория 2||Категория 3 , включая выбираемого при импорте/экспорте родителя. Если в файле первой категорией указан "Каталог", а при импорте выбрать родителем иную категорию, система выдаст сообщение с предложением проверить файл. При импорте скрипт проверит наличие на сайте категорий в соответствии с указанной цепочкой и создаст недостающие при их отсутствии с указанным шаблоном и классом ресурса (см. параметр category_class далее).
resource
Стандартные поля ресурса MODX - pagetitle, longtitle, published и т. д.
tv
TV-поле.Вторым элементом массива указывается имя поля или его ID (второе предпочтительнее — меньше запросов).
migx
TV-параметры типа MIGX. Второй элемент как и в случае с tv — имя поля или его ID. Третий — массив названий полей из конфигурации MIGX. Например, у ресурса есть MIGX-TV с характеристиками под названием chars, в котором для каждого элемента существуют поля title и value В этом случае запись конфига будет выглядеть так: array('Характеристики','chars', 'migx', array('title','value')), Если у ресурса в данном поле прописано, к примеру:.. Материал = Хлопок
Цвет = Зелёный
Размер = XL
..при экспорте данные будут записаны в файл в следующем виде: Материал--Хлопок||Цвет--Зелёный||Размер--XL При импорте эта строка будет сконвертирована обратно в JSON и записана в базу: [
{"MIGX_id":0,"title":"Материал","value":"Хлопок"},
{"MIGX_id":1,"title":"Цвет","value":"Зелёный"},
{"MIGX_id":2,"title":"Размер","value":"XL"}
] Настройка разделителей между полями и значениями производится в параметре migx_separators (см. далее).
ms
Поля продукта miniShop2 (таблица modx_ms2_products): article, price, old_price, weight, vendor, tags, new и т. д. Для множественных значений (теги, цвета, размеры) в импортируемом файле используйте разделитель ||: Тег01||Тег02||Тег03 Для производителя товаров miniShop2 vendor указывайте его название. Если такого производителя на сайте нет, он будет автоматически создан при импорте.
msoption
Опция товара (опции категорий). Для множественных значений в импортируемом файле используйте разделитель ||
msgallery
Галерея товара miniShop2. В импортируемом файле пути к изображениям прописывайте через разделитель ||: image01.jpg||image02.jpg||image03.jpg||image04.jpg||image05.jpg||image06.jpg Изображения должны быть предварительно загружены в директорию-источник, которая указана (относительно корня сайта) вторым элементом массива: array('Галерея','images/import/','msgallery'), Если директорию не указывать:.. array('Галерея','','msgallery'), ...скрипт будет искать изображения в директории-источнике по умолчанию: {assets_url}components/impex/images/. При экспорте данные берутся из таблицы modx_ms2_product_files. В файл сохраняются пути к основным изображениям, лежащим в корне директории продукта. То есть, если для товара с ID=25 структура папок такая: assets
images
products
25
small/
webp/
01.jpg
02.jpg
03.jpg То в файл запишется: 25/01.jpg||25/02.jpg||25/03.jpg При замене изображений товара (режим "Обновить всё", см. далее) можно, не меняя сам XLS/CSV-файл, просто создать необходимую структуру в любом месте, загрузить туда новые файлы:.. images
import
25
01.jpg
02.jpg
03.jpg ...и указать в настройках данную директорию в качестве источника: array('Галерея','images/import/','msgallery'),
mscats
Дополнительные категории товаров miniShop2 (вкладка "Категории" редактора товара в админке). Указывается в виде ID категорий. Вторым элементом массива можно указать разделитель между значениями (если пусто, используется ||). К примеру, если у товара указаны доп. категории 43, 48 и 56, то для такой настройки:.. array('Дополнительные категории','|','mscats'), ...в файле будет так: 43|48|56
Другие настройки
$impex_config['content_default']
Значения по умолчанию при импорте и экспорте: $impex_config['content_default'] = array(
array('template',6), // ID шаблона ресурса
array('published',1), // Опубликован
array('show_in_tree',1), // Виден в дереве
); Если значения не указаны ни тут, ни в основной разбивке колонок (а их, естественно, можно добавить в $impex_config['content_row'] напрямую: array('Публиковать','published','resource'),), скрипт проверит наличие системных настроек и настроек miniShop2 для товаров (шаблон товара, публикацию, видимость в дереве).
$impex_config['resource_class']
Класс ресурса. Для товаров miniShop2 используйте msProduct, для стандартных ресурсов MODX — modResource.
$impex_config['category_class']
Класс категории. Для категорий miniShop2 используйте msCategory, для стандартных ресурсов MODX — modResource и CollectionContainer для коллекций, если установлен компонент Collections.
$impex_config['category_id_field']
Поле, по которому ищется родитель (категория) при импорте. Используется, если категории указываются не цепочкой, а напрямую.
$impex_config['chk_field']
Поле, по которому ищется ресурс при импорте. Указывается в формате: array('название поля', 'тип поля'); Если тип ms или tv, поиск идёт просто по значению (соответственно, они должны быть уникальными). Если используете resource (например, pagetitle), то ещё учитывается родитель. Например, для товаров miniShop2 можно использовать артикул: $impex_config['chk_field'] = array('article','ms');
$impex_config['skip_new']
Пропускать ли несуществующие ресурсы. Если true скрипт не будет создавать новые ресурсы, а только обновлять существующие.
$impex_config['include_captions']
Идут ли первой строкой в файле названия полей true/false.
$impex_config['migx_separators']
Разделители для MIGX-полей. Первый элемент массива — разделитель между элементами, второй — между полями внутри элемента: $impex_config['migx_separators'] = array('||','--'); Тут MIGX-TV, содержащее элементы, состоящие из полей image, title, text и link:.. array('Преимущества','benefits','migx',array('image','title','text','link')), ...запишется в файл в виде: icons/icon01.svg--Низкие цены--Мы держим низкие цены--katalog/velosipedyi/detskie-velosipedyi/13/14/velo-04.html||icons/icon02.svg--Богатый опыт--У нас большой опыт--katalog/velosipedyi/vzroslyie-velosipedyi.html
$impex_config['batch_import']
Количество товаров, обрабатываемых при импорте за один проход (0 — без ограничений). Уменьшите, если сервер не успевает обрабатывать указанное кол-во товаров за раз (актуально при включенной обработке галереи miniShop2).
$impex_config['alias_field']
Какое поле использовать для генерации псевдонима при создании нового ресурса. Если оставить пустым, псевдоним не генерируется (например, если в $impex_config['content_row'] прямо указываете alias: array('Псевдоним','alias','resource'),
Экспорт ресурсов
Для экспорта достаточно выбрать родительский ресурс в дереве, конфигурацию (нажав кнопку рядом, можно открыть файл конфигурации и отредактировать его), тип файла и нажать "Экспорт". Ссылка на созданный файл будет выведена тут же.
Импорт ресурсов
Для импорта необходимо выбрать родительский ресурс, конфигурацию (также можно отредактировать), загрузить и/или выбрать файл для импорта из списка (можно удалить файлы при необходимости) а также выбрать режим обработки галереи miniShop2, предварительно загрузив изображения в указанную в $impex_config['content_row'] директорию-источник:
- "Не обрабатывать" — скрипт не будет учитывать изображения в файле.
- "Загружать только новые" — для новых товаров будут загружены новые изображения, для существующих товаров оставлены старые и добавлены новые, если они есть в файле и директории-источнике.
- "Обновить все" — для новых товаров будут загружены новые изображения, у существующих галерея сперва будет очищена, а потом загружены новые, указанные в файле, изображения.
Все операции производятся стандатными процессорами miniShop2 gallery/upload и gallery/removeall. Данные процессы достаточно ресурсоёмки, поэтому используйте обработку галереи в соответствии с мощностью вашего сервера. После успешной обработки галереи все указанные в файле импорта исходники из директории-источника удаляются. Дополнительно можно отметить опции:
- Тестирование. Если выбрано, после импорта откроется окно со ссылкой на системный журнал, где данные будут представлены в виде массива. Новые товары, данные, изменённые плагинами, а также новые категории будут помечены.
- Индексировать ли ресурс после импорта для компонента mSearch2, если он установлен в системе.
- Сохранять ли перед импортом резервную копию.
Если создание бэкапа включено, скрипт, прежде чем отправить данные на импорт, сохранит дамп контентных таблиц в директорию {assets_url/components/impex/backups/} и выведет ссылку на него. Таблицы, сохраняемые в резервную копию (modx_ - префикс по умолчанию, у вас может быть иной):
- modx_site_content
- modx_site_tmplvar_contentvalues
Если установлен miniShop2, добавляются:
- modx_ms2_products
- modx_ms2_vendors
- modx_ms2_product_options
- modx_ms2_product_files
- modx_ms2_product_categories
Если установлен mSearch2 добавляются:
- modx_mse2_words
- modx_mse2_intro


