Skip to content
MS3 Demo Data
MS3 Demo Data
Генератор демо-данных для MiniShop3 — производители, категории, товары, клиенты, заказы
  1. Компоненты
  2. MS3 Demo Data

MS3 Demo Data

Компонент для быстрой генерации демо-данных MiniShop3: производителей, категорий, товаров, клиентов и заказов. Незаменим для тестирования магазина, демонстрации клиентам и разработки.

Возможности

  • Генерация производителей с реалистичными названиями
  • Создание иерархии категорий с настраиваемой вложенностью
  • Генерация товаров с ценами, артикулами и описаниями
  • Создание демо-клиентов (msCustomer)
  • Генерация заказов с историей за указанный период
  • Три предустановленных пакета данных (S, M, L)
  • Поддержка асинхронного выполнения через Scheduler

Системные требования

ТребованиеВерсия
MODX Revolution3.0.0+
PHP8.1+
MiniShop31.0.0+

Зависимости

ПакетОбязательностьНазначение
MiniShop3ОбязательноМодели данных магазина
SchedulerОпциональноАсинхронное выполнение для больших пакетов
VueToolsОбязательноVue 3 и PrimeVue для интерфейса

Composer библиотеки

БиблиотекаВерсияНазначение
fakerphp/faker^1.23Генерация реалистичных данных

Установка

Через менеджер пакетов

  1. Перейдите в Extras → Installer
  2. Нажмите Download Extras
  3. Найдите MS3 Demo Data в списке
  4. Нажмите Download и затем Install

Из исходников (для разработчиков)

bash
git clone https://github.com/biz87/ms3DemoData.git
cd ms3demodata

# PHP зависимости
cd core/components/ms3demodata
composer install

# Vue виджеты
cd ../../../vueManager
npm install
npm run build

Использование

После установки компонент доступен в меню Extras → MS3 Demo Data.

Интерфейс

Интерфейс компонента позволяет:

  1. Выбрать пакет данных — размер генерируемого набора
  2. Указать родительский ресурс — куда создавать категории
  3. Выбрать шаблоны — для категорий и товаров
  4. Указать источник файлов — Media Source для изображений
  5. Выбрать режим выполнения — синхронно или через Scheduler
  6. Включить/отключить клиентов и заказы

Пакеты данных

Компонент предлагает три предустановленных пакета:

Маленький (S)

СущностьКоличество
Производители4
Категории6 (2 корневых, глубина до 3)
Товары100
Клиенты20
Заказы50 (1-3 товара, за 6 месяцев)

Подходит для быстрого тестирования и демонстраций.

Средний (M)

СущностьКоличество
Производители20
Категории20 (7 корневых, глубина до 3)
Товары2 000
Клиенты200
Заказы500 (1-5 товаров, за год)

Оптимален для тестирования производительности фильтров и поиска.

Большой (L)

СущностьКоличество
Производители100
Категории100 (33 корневых, глубина до 4)
Товары200 000
Клиенты5 000
Заказы20 000 (1-10 товаров, за 2 года)

Для нагрузочного тестирования. Рекомендуется использовать Scheduler.

Большой пакет

Генерация большого пакета (L) синхронно может занять много времени и привести к таймауту. Используйте Scheduler для фоновой генерации.

Режимы выполнения

Синхронный

Генерация выполняется сразу, результат возвращается в браузер. Подходит для маленьких и средних пакетов.

Через Scheduler

Задача добавляется в очередь Scheduler и выполняется в фоне. Обязателен для больших пакетов. Требует установленного компонента Scheduler.

Генерируемые данные

Производители (Vendors)

  • Название компании
  • Описание
  • Логотип (из базы изображений)
  • Email, телефон, адрес

Категории

  • Иерархическая структура с настраиваемой глубиной
  • Названия на основе словаря категорий товаров
  • Автоматическая транслитерация для alias
  • Применение указанного шаблона

Товары (Products)

  • Название и описание товара
  • Артикул (SKU)
  • Цена (случайная в диапазоне)
  • Привязка к случайному производителю
  • Привязка к случайной категории
  • Применение указанного шаблона

Клиенты (Customers)

  • Создаются как записи в таблице msCustomer
  • ФИО на русском языке
  • Email и телефон
  • Адрес доставки

Заказы (Orders)

  • Случайный клиент из созданных
  • Случайные товары (количество по конфигурации пакета)
  • Случайная дата в указанном диапазоне
  • Случайный статус заказа
  • Расчёт итоговой стоимости

Для разработчиков

Структура компонента

core/components/ms3demodata/
├── src/
│   ├── MS3DemoData.php              # Главный класс-фасад
│   ├── Services/
│   │   └── DemoDataGenerator.php    # Координатор генерации
│   └── Generators/                  # Генераторы данных
│       ├── AbstractGenerator.php    # Базовый класс
│       ├── VendorGenerator.php
│       ├── CategoryGenerator.php
│       ├── ProductGenerator.php
│       ├── CustomerGenerator.php
│       └── OrderGenerator.php
├── config/packages/                 # Конфигурации пакетов
│   ├── small.php
│   ├── medium.php
│   └── large.php
├── elements/tasks/                  # Задачи Scheduler
└── lexicon/{ru,en}/                 # Локализация

Программный запуск

php
// Получить сервис
$ms3demodata = $modx->services->get('ms3demodata');

// Создать генератор
$generator = new \MS3DemoData\Services\DemoDataGenerator($modx);

// Запустить генерацию
$result = $generator->run([
    'package' => 'S',           // S, M или L
    'parent_id' => 0,           // ID родительского ресурса
    'category_template' => 1,   // ID шаблона категории
    'product_template' => 2,    // ID шаблона товара
    'source_id' => 1,           // ID Media Source
    'generate_customers' => true,
    'generate_orders' => true,
]);

if ($result['success']) {
    echo $result['message'];
    // "Генерация завершена за 5.23 сек. Создано: производителей — 4, категорий — 6, товаров — 100, клиентов — 20, заказов — 50"
}

Создание кастомного генератора

Для добавления нового типа данных создайте класс, наследующий AbstractGenerator:

php
namespace MS3DemoData\Generators;

class MyCustomGenerator extends AbstractGenerator
{
    protected function loadData(): void
    {
        // Загрузка данных для генерации
        $this->data = [
            'items' => ['Item 1', 'Item 2', 'Item 3'],
        ];
    }

    public function generate(): array
    {
        $ids = [];
        $count = $this->config['my_items']['count'] ?? 10;

        for ($i = 0; $i < $count; $i++) {
            // Создание записи
            $item = $this->modx->newObject('MyModel');
            $item->set('name', $this->faker->sentence(3));

            if ($item->save()) {
                $ids[] = $item->get('id');
                $this->created++;
            } else {
                $this->errors++;
            }
        }

        return $ids;
    }
}

Конфигурация пакета

Файлы конфигурации пакетов (config/packages/*.php) возвращают массив с настройками:

php
return [
    'code' => 'S',
    'name' => 'Маленький',

    'vendors' => [
        'count' => 4,
    ],

    'categories' => [
        'count' => 6,
        'root_count' => 2,      // Категорий верхнего уровня
        'max_depth' => 3,       // Максимальная вложенность
    ],

    'products' => [
        'count' => 100,
    ],

    'customers' => [
        'count' => 20,
    ],

    'orders' => [
        'count' => 50,
        'min_products' => 1,    // Минимум товаров в заказе
        'max_products' => 3,    // Максимум товаров в заказе
        'date_from' => '-6 months',
        'date_to' => 'now',
    ],
];

Локализация

Компонент поддерживает русский и английский языки. Файлы локализации находятся в lexicon/{ru,en}/default.inc.php.