vgrish / mindbox-ms2
1.0.5
2025-03-31 07:23 UTC
Requires
- php: >=8.2
- ext-curl: *
- ext-json: *
- ext-pdo: *
- ext-simplexml: *
- ext-xmlwriter: *
- cuyz/valinor: ^1.13.0
- guzzlehttp/guzzle: ^7.0
- peppeocchi/php-cron-scheduler: ^4.0
- symfony/console: ^5.4
- vgrish/core-vendor-autoload-modx2: ^1.0
Requires (Dev)
- ergebnis/php-cs-fixer-config: ^6.33.0
- friendsofphp/php-cs-fixer: ^3.5
- jetbrains/phpstorm-attributes: 1.1
- phpstan/phpstan: ^1.10
README
Пакет интеграции сервиса mindbox для магазина MiniShop2 MODX Revolution V.2
Находится в разработке, версии могут не обладать обратной совместимостью. Список изменений можно найти в Changelog.
Установка пакета
composer require vgrish/mindbox-ms2 --update-no-dev
composer exec mindbox-ms2 install
Удаление пакета
composer exec mindbox-ms2 remove
composer remove vgrish/mindbox-ms2
Особенности
Настройки
api_endpoint_id
- Идентификатор точки интеграции apiapi_secret_key
- Секретный ключ apiwebhook_secret_key
- Секретный ключ webhookdevelopment_mode
- Режим разработки. Включает вывод данных в журнал MODx, а так же включает отслеживание изменений DTO сущностей в реальном времени.
Конфиг
Файл с указанием событий MODx и обработчиков. Расположен в папке пакета
core/components/mindbox-ms2/config.php
Пример конфига
<?php
declare(strict_types=1);
/**
* Copyright (c) 2024 Vgrish <vgrish@gmail.com>
* "vgrish/mindbox-ms2" package for MindBoxMS2
* @see https://github.com/vgrish/mindbox-ms2
*/
use Vgrish\MindBox\MS2\Config;
use Vgrish\MindBox\MS2\Tools\Extensions;
use Vgrish\MindBox\MS2\Webhooks;
use Vgrish\MindBox\MS2\Workers;
$config = Config\Config::init();
$config = $config->withWorkers(
Config\WorkersConfig::fromArray([
'OnWebPagePrerender' => [
Workers\Nomenclature\ViewCategory::class,
Workers\Nomenclature\ViewProduct::class,
],
'msopOnViewModification' => [
Workers\Nomenclature\ViewModification::class,
],
'OnWebLogin' => [
Workers\Customers\AuthorizeCustomer::class,
],
'OnUserSave' => [
Workers\Customers\RegisterCustomer::class,
],
'OnUserFormSave' => [
Workers\Customers\EditCustomer::class,
],
'msOnAddToCart' => [
Workers\Nomenclature\SetCart::class,
],
'msOnChangeInCart' => [
Workers\Nomenclature\SetCart::class,
Workers\Nomenclature\ClearCart::class,
],
'msOnRemoveFromCart' => [
Workers\Nomenclature\SetCart::class,
Workers\Nomenclature\ClearCart::class,
],
'msOnEmptyCart' => [
Workers\Nomenclature\ClearCart::class,
],
'msOnSaveOrder' => [
Workers\Orders\CreateAuthorizedOrder::class,
Workers\Orders\CreateUnauthorizedOrder::class,
Workers\Orders\UpdateOrder::class,
],
'msOnChangeOrderStatus' => [
Workers\Orders\UpdateOrderStatus::class,
],
'msFavoritesOnProcessFavorites' => [
Workers\Nomenclature\AddToWishList::class,
Workers\Nomenclature\RemoveFromWishList::class,
Workers\Nomenclature\ClearWishList::class,
],
]),
);
$config = $config->withWebHooks(
Config\WebHooksConfig::fromArray([
'GetPromoCodeOnFirstOrder' => [
Webhooks\PromoCodes\GetPromoCodeOnFirstOrder::class,
],
]),
);
$config = $config->withExtensions(
Config\ExtensionsConfig::fromArray([
Config\Config::getNomenclatureWebsiteId => static fn (...$args) => Extensions::getNomenclatureWebsiteId(...$args),
]),
);
return $config;
Cron
Для передачи данных в сервис mindbox необходимо поставить файл на cron
core/components/mindbox-ms2/cli/cron.php
Вызов событий из внешнего кода
Обработчик события можно вызвать вручную, пример вызовов для работы со списком избранного
- Добавление в список избранного
/** @var Vgrish\MindBox\MS2\App $app */
if ($app = $modx->services[\Vgrish\MindBox\MS2\App::NAME] ?? null) {
$worker = new \Vgrish\MindBox\MS2\Workers\Nomenclature\AddToWishList($app, [
'props' => [
'method' => 'add',
'key' => '1', // идентификатор ресурса
],
]);
$worker->run();
}
- Удаление из списка избранного
/** @var Vgrish\MindBox\MS2\App $app */
if ($app = $modx->services[\Vgrish\MindBox\MS2\App::NAME] ?? null) {
$worker = new \Vgrish\MindBox\MS2\Workers\Nomenclature\RemoveFromWishList($app, [
'props' => [
'method' => 'remove',
'key' => '1', // идентификатор ресурса
],
]);
$worker->run();
}
- Очистка списка избранного
/** @var Vgrish\MindBox\MS2\App $app */
if ($app = $modx->services[\Vgrish\MindBox\MS2\App::NAME] ?? null) {
$worker = new \Vgrish\MindBox\MS2\Workers\Nomenclature\ClearWishList($app, [
'props' => [
'method' => 'clear',
],
]);
$worker->run();
}
Сниппет MindBoxMS2.Nomenclature.feed
Выводит фид с номенклатурой. Пример вызова
[[!MindBoxMS2.Nomenclature.feed?
&categories:showUnpublished=`0`
&products:leftJoin=`{ "TVcount" : {"class": "modTemplateVarResource", "on": "msProduct.id = TVcount.contentid AND TVcount.tmplvarid = '13'" } }`
&products:select=`{ "TVcount": "TVcount.value as count" }`
&products:showUnpublished=`0`
]]