Перейти к содержанию

Состав платформы

SkeekS Магазин

Каталог, корзина, заказы, склады, кассы и платежи.

Другие решения раздела «Состав платформы»

Установка

Подключите пакет в корне проекта на SkeekS Платформе, затем примените миграции проекта.

composer require skeeks/cms-shop

Зависимости

Инструкция из репозитория

Shop on SkeekS CMS

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist skeeks/cms-shop "*"

or add

"skeeks/cms-shop": "*"

Configuration app


'components' =>
[
    'admin' => [
        'dashboards'         => [
            'Shop' =>
            [
                'skeeks\cms\shop\dashboards\ReportOrderDashboard'
            ]
        ],
    ],

    'shop' => [
        'class'         => 'skeeks\cms\shop\components\ShopComponent',
    ],

    'i18n' => [
        'translations'  =>
        [
            'skeeks/shop/app' =>
            [
                'class'             => 'yii\i18n\PhpMessageSource',
                'basePath'          => '@skeeks/cms/shop/messages',
                'fileMap' => [
                    'skeeks/shop/app' => 'app.php',
                ],
            ]
        ],
    ],

    'urlManager' => [
        'rules' => [
            '~shop-cart'                             => 'shop/cart',
            '~shop-<_a:(checkout|payment)>'          => 'shop/cart/<_a>',
            '~shop-<_a:(finish)>'                    => 'shop/order/<_a>',
            '~shop-order/<_a>'                       => 'shop/order/<_a>',
        ]
    ],
],

'modules' =>
[
    'shop' => [
        'class'         => 'skeeks\cms\shop\Module',
    ]
]

Pay systems

  • paypal
  • robokassa
  • Yandex kassa
  • Tinkoff

Links


skeeks!
SkeekS CMS (Yii2) — quickly, easily and effectively!
skeeks.com | cms.skeeks.com

README на GitHub

Поддержка

Вопросы по установке и работе решения можно задать командой SkeekS или завести обращение в репозитории.

Обновления

v3.2.7.27

Добавили полную сверку каталога GPD: она проверяет товары, затем коллекции и бренды, учитывая настройки синхронизации сайта. Сверка доступна для ручного запуска в расписаниях и выполняется раз в 30 дней.

Для брендов и коллекций появились отдельные настройки «Объект исключён из API»: оставлять, деактивировать, удалять при отсутствии связанных данных или «Удалять, включая сохранённые фильтры». По умолчанию выбран режим «Оставлять».

Если у бренда или коллекции остался хотя бы один товар, объект сохраняется без удаления и деактивации. Это относится и к товарам, созданным вручную, неактивным карточкам и товарам со складским учётом. При разрешённом удалении пустого бренда сначала удаляются его сохранённые фильтры. Товары, заказы и документы такая очистка не удаляет. Само отсутствие активных товаров не служит причиной удаления.

В отчёте сверки показаны три последовательных этапа, количество проверенных, удалённых, деактивированных и сохранённых объектов, а также причины, требующие уточнения. Основные счётчики видны и в списке расписаний.

Старые связи проверяются пакетами по 20 объектов с паузой в одну секунду. Маркет подтверждает исключения через API v2 в тех же запросах, без дополнительных обращений. Ошибка API или неподтверждённый статус не разрешают удаление.

Для проверки старых связей нужен обновлённый сервер API v2. Первую полную сверку нескольких сайтов рекомендуется запускать последовательно: ограничение нагрузки действует отдельно для каждого сайта. Перед обновлением проверьте настройки удаления и сохраните резервную копию базы. Исправлена также проверка структуры таблицы при автоматическом переходе на расписания GPD.

v3.2.7.26

Автоматическое обновление стоимости доставки

Добавили в модуль магазина общий механизм пересчёта доставки при изменении корзины. Подключённые к нему службы могут обновлять стоимость после добавления и удаления товаров, изменения количества и возвращения покупателя в корзину.

Перед оформлением магазин повторно проверяет стоимость доставки. Если расчёт не выполнен, оформление останавливается. Если цена изменилась, покупатель получает обновлённый итог и должен подтвердить его повторным оформлением. Стоимость доставки уже оформленных заказов сохраняется.

Первым этот механизм использует обновлённый модуль СДЭК 2.1.3. Фиксированные способы доставки продолжают работать как прежде. Для других служб, включая Boxberry, предусмотрен общий механизм подключения; их расчёт необходимо реализовать в соответствующем модуле.

v3.2.7.24

Фильтр наличия товаров получает только ID складов поставщиков через getSupplierStoreIds(), без создания полных моделей ShopStore.

Сохранены типы идентификаторов, заданные через setter наборы, уже загруженные модели и проектные переопределения getter. Снимок ID хранится в объекте компонента, заменяется при смене сайта и сбрасывается setter. Статический и межзапросный кеш не добавлены.

Проверки на SQLite: отсутствие гидратации, повторные и пустые чтения, смена сайта, setters, переопределения и результаты фильтра для собственных/поставщицких складов и товарных предложений. Синтаксис PHP проверен.

На главной plitka-lab.ru пик памяти снизился с 26,614 до 26,062 МиБ — примерно на 0,55 МиБ, одинаково в трёх замерах. Число SQL осталось 44. Диагностический запуск подтвердил отсутствие создания 25 моделей складов. На товарной странице заметного выигрыша нет: там полные модели загружаются другим путём. Обе страницы возвращают HTTP 200; заголовки и canonical-ссылки сохранены.

v3.2.7.23

Связь CmsSite::getShopSite кеширует настройки магазина на 8 часов. Зависимости: тег таблицы ShopSite для автоматического сброса при сохранении/удалении и тег сайта для кнопки очистки кеша.

Контракт ActiveQuery сохранён, доступен noCache(). При пакетной загрузке без конкретного ID и при отдельном хранилище queryCache оптимизация не включается. Прямые SQL-изменения требуют явной инвалидации, поскольку обходят события моделей.

SQLite-проверки покрывают попадания в кеш, ручной и автоматический сброс, создание после пустого результата, удаление, разные сайты и eager loading. Проверено на plitka-lab.ru: при прогретом кеше запросы shop_site исчезли на главной и товарной странице.

v3.2.7.22

Правила URL кассы и склада больше не загружают склад на страницах витрины. В соответствующем разделе найденная модель используется повторно, без второго SELECT; выбор склада выполняется до запуска backend.

Проверено на plitka-lab.ru: главная — 69 → 65 SQL, товарная — 123 → 119 SQL. Все четыре повторных запроса устранены, обе страницы возвращают HTTP 200.

Добавлена проверка обоих правил на SQLite: чужие маршруты без SQL, выбор по сайту и параметру, пустой набор и доступность склада при запуске backend. Проверка синтаксиса PHP пройдена.

v3.2.7.21

Метод getShopContents теперь получает товарный контент один раз за вызов вместо двух. Сохранены пустой результат и актуальность следующих вызовов: общий кеш не добавлен. Проверены PHP lint и сценарии существующего, отсутствующего и изменившегося контента. На plitka-lab.ru количество запросов товарного контента на главной сократилось с шести до трёх.

v3.2.7.20

Добавлен ProductCardData для загрузки остатков, избранного и сравнения сразу для товаров текущего списка.

  • Три пакетных запроса вместо отдельных запросов для каждой карточки.
  • Сохранены ограничения по текущему пользователю и набору складов.
  • Данные загружаются заново для каждого снимка списка; общий межзапросный кеш не используется.
  • Расчёт цен, скидок и выбор торговых предложений не изменены.

Подключение в стандартных каталогах и слайдерах выполнено в theme-unify-shop 2.2.1.2. Для собственных шаблонов helper можно передать через viewParams Yii ListView.

Проверки: PHP 8.2 и изолированная SQLite с реальными связями Yii. Для 26 карточек результаты трёх пакетных запросов совпали с 78 индивидуальными выборками; проверены пользователи, гости, наборы складов, пустые и отрицательные остатки, пустые списки и актуальность после изменений.

v3.2.7.19

Исправлена синхронизация складских позиций GPD при перепривязке к другому товару на маркете: сохраняется ID позиции, освобождается старая привязка и пересчитываются цены обоих товаров. Перенос между сайтами запрещён.

Пересчёт складских цен выполняется порциями без общей длинной транзакции. Внутренние SQL-выборки ограничены текущей порцией, записи прогресса больше не блокируются до завершения всего каталога.

Проверено: 77 проверок пересчёта на отдельной MariaDB; сценарии перепривязки, повторного импорта и защиты другого сайта; исправление применено на Arena и k-mix.

v3.2.7.18

Оставшиеся прямые задания магазина переведены на cms-job: обновление вложенных товаров выполняется порциями с прогрессом и отменой. Планировщик больше не ждёт окончания этой SQL-операции.

Пять заданий GPD зарегистрированы в cmsAgent.jobs. cmsAgent/init создаёт и поддерживает системные расписания с замочком. Миграция переводит существующие записи, сохраняя историю и включённость.

Уведомления о поступлении сохраняют прежнее отключённое поведение — рассылка не включается.

Проверено: 67 SQL/handler-проверок, миграция расписаний, 38 проверок перехода GPD и защита старых процессов. При обновлении нужен перезапуск воркера maintenance; живой старый процесс расписания следует завершить перед миграцией.

v3.2.7.16

В списке поставщиков добавлен фильтр активности: «Все», «Да», «Нет». Неактивные поставщики корректно отбираются по значению 0.

Включены стандартные сохранённые представления списка с учётом прав доступа.

Миграции не требуются.

Показать ещё 10 обновлений осталось 608