
MS3 Demo Data
Компонент для быстрой генерации демо-данных MiniShop3: производителей, категорий, товаров, клиентов и заказов. Незаменим для тестирования магазина, демонстрации клиентам и разработки.
Возможности
- Генерация производителей с реалистичными названиями
- Создание иерархии категорий с настраиваемой вложенностью
- Генерация товаров с ценами, артикулами и описаниями
- Создание демо-клиентов (msCustomer)
- Генерация заказов с историей за указанный период
- Три предустановленных пакета данных (S, M, L)
- Поддержка асинхронного выполнения через Scheduler
Системные требования
| Требование | Версия |
|---|---|
| MODX Revolution | 3.0.0+ |
| PHP | 8.1+ |
| MiniShop3 | 1.0.0+ |
Зависимости
| Пакет | Обязательность | Назначение |
|---|---|---|
| MiniShop3 | Обязательно | Модели данных магазина |
| Scheduler | Опционально | Асинхронное выполнение для больших пакетов |
| VueTools | Обязательно | Vue 3 и PrimeVue для интерфейса |
Composer библиотеки
| Библиотека | Версия | Назначение |
|---|---|---|
| fakerphp/faker | ^1.23 | Генерация реалистичных данных |
Установка
Через менеджер пакетов
- Перейдите в Extras → Installer
- Нажмите Download Extras
- Найдите MS3 Demo Data в списке
- Нажмите Download и затем Install
Из исходников (для разработчиков)
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.
Интерфейс
Интерфейс компонента позволяет:
- Выбрать пакет данных — размер генерируемого набора
- Указать родительский ресурс — куда создавать категории
- Выбрать шаблоны — для категорий и товаров
- Указать источник файлов — Media Source для изображений
- Выбрать режим выполнения — синхронно или через Scheduler
- Включить/отключить клиентов и заказы
Пакеты данных
Компонент предлагает три предустановленных пакета:
Маленький (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}/ # ЛокализацияПрограммный запуск
// Получить сервис
$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:
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) возвращают массив с настройками:
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.
