
- MODX 3
- PHP 8.1
- miniShop3


Компонент для быстрой генерации демо-данных MiniShop3: производителей, категорий, товаров, клиентов и заказов. Незаменим для тестирования магазина, демонстрации клиентам и разработки.
| Требование | Версия |
|---|---|
| MODX Revolution | 3.0.0+ |
| PHP | 8.1+ |
| MiniShop3 | 1.0.0+ |
| Пакет | Обязательность | Назначение |
|---|---|---|
| MiniShop3 | Обязательно | Модели данных магазина |
| Scheduler | Опционально | Асинхронное выполнение для больших пакетов |
| VueTools | Обязательно | Vue 3 и PrimeVue для интерфейса |
| Библиотека | Версия | Назначение |
|---|---|---|
| fakerphp/faker | ^1.23 | Генерация реалистичных данных |
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.
Интерфейс компонента позволяет:
Компонент предлагает три предустановленных пакета:
| Сущность | Количество |
|---|---|
| Производители | 4 |
| Категории | 6 (2 корневых, глубина до 3) |
| Товары | 100 |
| Клиенты | 20 |
| Заказы | 50 (1-3 товара, за 6 месяцев) |
Подходит для быстрого тестирования и демонстраций.
| Сущность | Количество |
|---|---|
| Производители | 20 |
| Категории | 20 (7 корневых, глубина до 3) |
| Товары | 2 000 |
| Клиенты | 200 |
| Заказы | 500 (1-5 товаров, за год) |
Оптимален для тестирования производительности фильтров и поиска.
| Сущность | Количество |
|---|---|
| Производители | 100 |
| Категории | 100 (33 корневых, глубина до 4) |
| Товары | 200 000 |
| Клиенты | 5 000 |
| Заказы | 20 000 (1-10 товаров, за 2 года) |
Для нагрузочного тестирования. Рекомендуется использовать Scheduler.
Большой пакет
Генерация большого пакета (L) синхронно может занять много времени и привести к таймауту. Используйте Scheduler для фоновой генерации.
Генерация выполняется сразу, результат возвращается в браузер. Подходит для маленьких и средних пакетов.
Задача добавляется в очередь Scheduler и выполняется в фоне. Обязателен для больших пакетов. Требует установленного компонента Scheduler.
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.