roilafx/product

There is no license information available for the latest version (dev-main) of this package.

Maintainers

Package info

github.com/Kolya1222/product

pkg:composer/roilafx/product

Transparency log

Statistics

Installs: 9

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-08-05 02:53 UTC

This package is auto-updated.

Last update: 2026-08-05 02:53:42 UTC


README

API-ориентированное решение для создания каталогов товаров с поддержкой вариантов (торговых предложений) и фасетного поиска (Faceted Search) для Evolution CMS.

Установка

  1. Установка пакета
    php artisan package:installrequire roilafx/product "*"
  2. Публикация стилей и скриптов
    php artisan vendor:publish --provider="roilafx\Product\ProductServiceProvider"
  3. Выполните миграции:
    php artisan migrate

Кастомная конфигурация фильтров (Filter Config)

В 95% случаев сервис работает без конфигурации. Но если вам нужно переопределить логику (например, фильтровать текстовое поле строго по совпадению, или поменять тип отображения), передайте $filterConfig:

$filterConfig = [
    'price' => [
        'display' => ['type' => 'number'],
        'filter'  => ['operator' => 'between', 'field' => 'value_numeric'],
    ],
    'brand' => [
        'display' => ['type' => 'select'],
        'filter'  => ['operator' => 'eq', 'field' => 'value'], // Точное совпадение вместо LIKE
    ],
    'weight' => [
        'filter' => ['operator' => 'gte'] // Больше или равно
    ]
];

$productsPaginator = $filterService->getFilteredProductsWithAttributes(
    $catalogId,
    request('filters', []),
    12,
    'menuindex:asc',
    ['price', 'brand', 'weight'],
    null,
    $filterConfig, // <--- Передаем конфиг
    $depth
);

Работа с вариантами товаров (ProductVariantService)

use EvolutionCMS\Product\Services\ProductVariantService;

$variantService = app(ProductVariantService::class);

// Создание варианта для товара ID = 15
$variant = $variantService->createVariant(15, [
    'color' => 'Красный',
    'size'  => 'XL',
    'price' => 1999
]);

// Обновление варианта
$variantService->updateVariant($variant, [
    'price' => 1899
]);

Сервис автоматически проверит, назначены ли эти атрибуты товару, сохранит значения в EAV и обновит attrs_json.

CLI Инструменты

Для тестирования производительности в пакет включена Artisan-команда, генерирующая реалистичные данные:

php artisan product:generate-test-data

Команда создаст:

  • 10 категорий и подкатегорий.
  • 14 атрибутов (цвет, размер, вес, цена и т.д.).
  • 4 пресета (Одежда, Электроника и т.д.).
  • 5000 товаров с 2-6 вариантами у каждого.

Производительность и Кэширование

  • Кэширование фильтров: Результаты getFilterState и getFilteredProducts кэшируются на 1 час (3600 сек). Ключ кэша включает ID категории, сериализованные фильтры и конфиг.
  • Сброс кэша: Кэш сбрасывается автоматически через Observers (ProductVariantObserver, VariantAttributeValueObserver) при любом изменении вариантов или их значений.
  • Subqueries: Все методы сервиса используют Closures в whereIn, что позволяет MySQL оптимизировать план выполнения запроса без передачи огромных массивов ID между PHP и БД.