02 марта 2021, 17:23 и в самом компоненте есть небольшая недоработка по работе с заказом в админке(этот функционал не был изначально в задумке, но позже на скорую руку добавил) так как реализована работа с монетами авторизованного пользователя то при записи заказа в админке используются монеты авторизованного в админке, там всего несколько строк изменений, но я выкатить это не могу так как среда разработки была на винде, а сейчас я на маке и тупо нет возможности плюс не приобрел ещё лицензию на PHPSTORM на котором реализовывал компонент. здесь теперь реализовано от ИД пользователя из заказа файл: новое содержимое файла: <?php class msrpcMain { /** @var modX $modx */ public $modx; /** @var array $config */ public $config; public function __construct(&$modx, $config = array()) { $this->modx = &$modx; $this->config = array( 'css_url' => $this->modx->getOption('msrpc_css_url', null, MODX_ASSETS_URL.'components/msreferralprogramcoin/styles/main.css'), 'js_url' => $this->modx->getOption('msrpc_js_url', null, MODX_ASSETS_URL.'components/msreferralprogramcoin/js/web/msrpcincluder.js'), 'connector_url' => $this->modx->getOption('msrpc_connector_url', null, MODX_ASSETS_URL.'components/msreferralprogramcoin/connector.php'), 'name_coin' => trim($this->modx->getOption('msrpc_name_bonus_coin',null, 'Coin')), 'default_pr_payroll' => (int)$this->modx->getOption('msrpc_default_pr_payroll_coins',null, 0), 'pr_cart_paid' => (int)$this->modx->getOption('msrpc_max_pr_cart_paid_by_coins',null, 0), 'statuses_for_inc' => $this->modx->getOption('msrpc_order_statuses_for_inc_coins',null, 0), 'statuses_for_dec' => $this->modx->getOption('msrpc_order_statuses_for_dec_coins',null, 0), 'ratio_of_coins' => (int)$this->modx->getOption('msrpc_ratio_of_coins',null, 1), 'welcome_coins' => (int)$this->modx->getOption('msrpc_welcome_coins_for_registration',null, 0), 'welcome_coins_if' => (int)$this->modx->getOption('msrpc_welcome_coins_if_promocode',null, 0) ); $this->config = array_merge($this->config, $config); $this->config['css_url'] = str_replace('[[+cssBasePath]]', MODX_ASSETS_URL.'components/msreferralprogramcoin/styles/', $this->config['css_url']); $this->config['js_url'] = str_replace('[[+jsBasePath]]', MODX_ASSETS_URL.'components/msreferralprogramcoin/js/', $this->config['js_url']); $this->config['connector_url'] = str_replace('[[+assetsBasePath]]', MODX_ASSETS_URL.'components/msreferralprogramcoin/', $this->config['connector_url']); $this->config['name_coin'] = iconv_strlen($this->config['name_coin']) < 1 ? 'Coin' : $this->config['name_coin']; $this->config['promo_prefix'] = mb_strtoupper(iconv_substr($this->config['name_coin'], 0, 1)); $this->config['promo_suffix'] = 'R'; $this->config['ratio_of_coins'] = !$this->config['ratio_of_coins'] ? 1 : $this->config['ratio_of_coins']; $this->config['default_pr_payroll'] = !$this->config['default_pr_payroll'] ? 0 : $this->config['default_pr_payroll']; $this->config['pr_cart_paid'] = !$this->config['pr_cart_paid'] ? 0 : $this->config['pr_cart_paid']; $this->config['welcome_coins'] = !$this->config['welcome_coins'] ? 0 : $this->config['welcome_coins']; $this->config['welcome_coins_if'] = !$this->config['welcome_coins_if'] ? 0 : $this->config['welcome_coins_if']; $this->includeCssAndJs(); $this->modx->addPackage('msreferralprogramcoin', MODX_CORE_PATH.'components/msreferralprogramcoin/model/'); } public function includeCssAndJs() { if ($this->modx->context->key != 'mgr') { $this->modx->regClientCSS($this->config['css_url']); $this->modx->regClientScript($this->config['js_url']); } } public function loadLexicons() { $this->modx->lexicon->load('msreferralprogramcoin:default'); if ($this->modx->context->key == 'mgr') { $this->modx->lexicon->load('msreferralprogramcoin:menu'); } } public function OnUserSave($uid) { if (!$uid || !$this->config['welcome_coins']) return; /** @var msrpcHandPayroll $handPayroll */ $handPayroll = $this->modx->newObject('msrpcHandPayroll'); $handPayroll->set('user_id', $uid); $handPayroll->set('payroll', $this->config['welcome_coins']); $handPayroll->set('createdby', $uid); $handPayroll->set('createdon', time()); if (!$handPayroll->save()) { $this->modx->log(modX::LOG_LEVEL_ERROR, '[msrpcMain] - Not save welcome coins for user ID '.$uid); } } public function OnUserBeforeSave($promo) { $referrer_promocode = iconv_substr(trim($promo), 1); if (empty($referrer_promocode)) { return 0; } $timestamp_1 = stristr($referrer_promocode, 'R'); $referrer_id = (int)trim(stristr($referrer_promocode, 'R', true)); $timestamp_2 = trim(iconv_substr($timestamp_1, 1)); if (!$timestamp_1 || !$referrer_id || !(int)$timestamp_2 || iconv_strlen($timestamp_2) !== 2) { return 0; } $query = $this->modx->newQuery('modUser', array('id' => $referrer_id)); $query->select(array( 'modUser.createdon as createdon' )); $query->prepare(); $query->stmt->execute(); /** @var array[] $Users */ $users = $query->stmt->fetchAll(PDO::FETCH_ASSOC); if (!count($users) || $timestamp_2 !== substr($users[0]['createdon'],-2)) { return 0; } return (int)$referrer_id; } public function msOnBeforeSaveOrder(msOrder $msOrder, $payCoins) { $delivery_cost = $msOrder->get('delivery_cost'); $oid = 0; if ($msOrder->id){ $oid = $msOrder->id; $payCoins = $msOrder->msrpc_payroll_dec; } $products = $msOrder->getMany('Products'); $payroll = 0; $total_cost = 0; $pr_payroll = $this->config['default_pr_payroll']; if ($this->modx->user->id) { $query = $this->modx->newQuery('modUser', array('id' => $msOrder->user_id)); $query->select(array( 'modUser.msrpc_pr_payroll as pr_payroll' )); $query->prepare(); $query->stmt->execute(); /** @var array[] $modUsers */ $modUsers = $query->stmt->fetchAll(PDO::FETCH_ASSOC); if (count($modUsers) && $modUsers[0]['pr_payroll']) { $pr_payroll = (int)$modUsers[0]['pr_payroll']; } } /** @var msOrderProduct $product */ foreach ($products as $product) { $total_cost += $product->get('price') * $product->get('count'); if (!$this->modx->getObject('modResource', $product->product_id)->msrpc_check) continue; $payroll += (($product->get('price') * $product->get('count')) / 100) * $pr_payroll; } $payroll = (int)round($payroll * $this->config['ratio_of_coins'],0); $msOrder->set('msrpc_payroll_inc', $payroll); if ($this->modx->user->id && $payCoins) { $balance = 0; $query = $this->modx->newQuery('msrpcHandPayroll', array('user_id' => $msOrder->user_id)); $query->groupby('msrpcHandPayroll.user_id'); $query->select(array( 'SUM(msrpcHandPayroll.payroll) as payroll' )); $query->prepare(); $query->stmt->execute(); $rows = $query->stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { $balance += (int)$row['payroll']; } $query = $this->modx->newQuery('msOrder', array( 'id:!=' => $oid, 'user_id' => $msOrder->user_id, 'status:IN'=> explode(',', $this->modx->getOption('msrpc_order_statuses_for_inc_coins',null, 0)) )); $query->groupby('msOrder.user_id'); $query->select(array( 'SUM(msOrder.msrpc_payroll_inc) as payroll' )); $query->prepare(); $query->stmt->execute(); $rows = $query->stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { $balance += (int)$row['payroll']; } $query = $this->modx->newQuery('msOrder', array( 'id:!=' => $oid, 'user_id' => $msOrder->user_id, 'status:IN'=> explode(',', $this->modx->getOption('msrpc_order_statuses_for_dec_coins',null, 0)) )); $query->groupby('msOrder.user_id'); $query->select(array( 'SUM(msOrder.msrpc_payroll_dec) as payroll' )); $query->prepare(); $query->stmt->execute(); $rows = $query->stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { $balance -= (int)$row['payroll']; } if (!$balance) return; $forPayCost = ($total_cost/100)*$this->config['pr_cart_paid']; $forPayCoins = (int)round($forPayCost * $this->config['ratio_of_coins'], 0); $forPayCostB = (int)round($balance / $this->config['ratio_of_coins'], 0); $msOrder->set('msrpc_payroll_dec', min($balance, $forPayCoins)); $msOrder->set('cost', $total_cost-min($forPayCostB, $forPayCost)+$delivery_cost); $msOrder->set('cart_cost', $total_cost-min($forPayCostB, $forPayCost)); } } public function OnMODXInit() { $this->modx->map['modResource']['fields']['msrpc_check'] = 0; $this->modx->map['modResource']['fieldMeta']['msrpc_check'] = array( 'dbtype' => 'tinyint', 'precision' => '1', 'attributes' => 'unsigned', 'phptype' => 'boolean', 'null' => false, 'default' => 0 ); $this->modx->loadClass('modUser'); $this->modx->map['modUser']['fields']['msrpc_referrer_id'] = 0; $this->modx->map['modUser']['fieldMeta']['msrpc_referrer_id'] = array( 'dbtype' => 'int', 'precision' => 10, 'attributes' => 'unsigned', 'phptype' => 'integer', 'null' => false, 'default' => 0 ); $this->modx->map['modUser']['fields']['msrpc_pr_payroll'] = 0; $this->modx->map['modUser']['fieldMeta']['msrpc_pr_payroll'] = array( 'dbtype' => 'tinyint', 'precision' => '2', 'attributes' => 'unsigned', 'phptype' => 'integer', 'null' => false, 'default' => 0 ); $this->modx->loadClass('msOrder'); $this->modx->map['msOrder']['fields']['msrpc_payroll_inc'] = 0; $this->modx->map['msOrder']['fieldMeta']['msrpc_payroll_inc'] = array( 'dbtype' => 'int', 'precision' => 10, 'attributes' => 'unsigned', 'phptype' => 'integer', 'null' => false, 'default' => 0 ); $this->modx->map['msOrder']['fields']['msrpc_payroll_dec'] = 0; $this->modx->map['msOrder']['fieldMeta']['msrpc_payroll_dec'] = array( 'dbtype' => 'int', 'precision' => 10, 'attributes' => 'unsigned', 'phptype' => 'integer', 'null' => false, 'default' => 0 ); } } Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
02 марта 2021, 16:55 Там много, что может быть, от ошибки при записи кеша админки до отсутствия какого-то модуля на php нужного для выполнения скрипта или вообще просто скрипты MODX в твоём браузере не хотят работать. Стоит начать с того чтобы зайти через другой браузер попробовать. Да, и лог ошибок можно посмотреть, может там что есть. Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
02 марта 2021, 16:40 Кирилл, привет, только зашел сюда :) без TV всё работает? передал по твшкам спецу так как сам твшки не пользую я больше по бэку Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
02 ноября 2020, 19:37 кстати, допилил твой компонент для работы с разными аккаунтами црм, мне для системы франчайзинга понадобилось так как будет куча аккаунтов црм и в одном сеансе заказ раскидывать по франчам регионов придется Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 +1
02 ноября 2020, 19:33 Артём Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
08 октября 2020, 21:52 у меня в данный момент итак работы много в данный момент создаю систему франчайзинга в моей автоматизации включающей 1с, ритейлцрм и сайт hookah.pro (MODX выбрал для разработки клиент и мне пришлось за пару недель его до такой степени изучить, что даже создал им этот компонент оцененный специалистом по разработке компонентов в 120тр именно в моём исполнени основанном на моём 30ти летнем опыте программирования на разных языках) плюс ко всему мною созданная архитектура этой автоматизации работает полностью в реальном времени и более того в 1с уже все включая менеджеров лезут только за отчетами так как всё создается и пересоздается автоматически по данным црм(заказы, оплата, реализации… и из розничных точек из ТСД(терминал сбора данных)заказы летят через 1С в црм и дальше там обрабатываются и в реальном времени обновляются в 1С и на сайте(резервы и остатки напряую нативным кодом 1С практически в реальном времени по пакетному АПИ написанному мной для сайта плюс на сайте мной реализована проверка остатка по АПИ црм при создании заказа из корзины так как в црм чуть быстрее чем на сайте происходит обновление остатка за минусом резерва прилетевшего из црм заказа в 1с тут-же отражается в црм по нему 1Сный резерв!) так как создан мной вебсервис в 1С и 1С поднята как вебсервер принимая хуки изменения сразу из црм...) и даже заказы поставщикам и перемещения по складам моими обработками создаются по расписанию по уникальным алгоритмам вычисления потребности по каждой категории товаров Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
08 октября 2020, 19:30 за всё время 3 реальных покупки даже по 390р. так. что пускай уж бесплатно будет ;) Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 +1
25 сентября 2020, 12:16 Нет финансирования, занимаюсь более насущными задачами :) Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
25 июля 2020, 11:56 Компонент не конфликтует с доугими компонентами бонусов и удачно их дополняет :) Новые дополнения и их версии / Без особой причины 390 рублей :) 5 0
20 июля 2020, 15:03 Сергей, привет, это снижение цены Новые дополнения и их версии / Без особой причины 390 рублей :) 5 +1
01 июля 2020, 20:40 Интересная и очень полезная статья про правильное использование бонусной программы www.retail.ru/rbc/pressreleases/pervaya-sistema-bonusnaya-sistema-skidok/ Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
31 мая 2020, 14:30 у нас заказчик которому супер автоматизированный и завязанный со всеми необходимыми сервисами включая црм и 1С с созданием для этого быстрого пакетного АПИ… и модх был выбран не за бесплатность(так как до этого на платных движках полная х… была реализована), а именно за гибкость и именно рево! Для разработчиков / Защита дополнений в деталях 180 0
30 мая 2020, 21:02 Привет, заявка на вывод планируется в профессиональной версии компонента где будет реализована полноценная двухуровневая партнёрка, а здесь кешбэк монетой магазина именно на покупки магазина и привод клиентов увеличивает процент кешбэка ;) Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
29 мая 2020, 18:54 очень странные вещи ты говоришь… например мой компонент msReferralProgramCoin по себестоимости разработки(почти месяц) обошелся в 90-120тр, а продаю всего за 3990 рублей, а с напарником (который не кодил, а продвигает и подкидывает идеи для доработок улучшающих юзабилити) получаем с продажи оплатив налоги и комиссию по 1300 рублей! и я затратил эти ресурсы не зная ту зе мун или в топку ;) Для разработчиков / Защита дополнений в деталях 180 0
28 мая 2020, 22:52 В версию 1.1.11 добавлен пересчет списываемых монет при оплате монетами и при удалении товара из корзины :) Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
26 мая 2020, 16:35 Сергей, привет! о каком заработке идет речь? в компоненте реализованы как сниппеты самого механизма учета так и сниппеты вывода информации о текущем проценте кешбэка покупателя и количества его монет, а также количество и процент вы можете у каждого пользователя видеть и руками поменять в панели управления сайтом на странице самого компонента. Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
23 мая 2020, 04:56 В новой версии 1.1.9 в контекстное меню списка товаров добавлены пункты массовой установки и снятия флага участия товара в бонусной программе у выбранных в этом списке товаров. Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
21 мая 2020, 01:36 По просьбам пользователей в новой версии 1.1.8 добавлено: Две настройки приветственного бонуса при регистрации: Само количество бонусных монет зачисляемых на баланс покупателя при регистрации (по умолчанию 0). Флаг зачисления приветственных бонусов только в том случае если введен валидный промокод пригласившего, что усилит мотивацию ввода промокода пригласившего! Для простоты установки и контроля флаг участия товара в бонусной программе кешбэка добавлен в саму таблицу товаров в дополнение к чекбоксу на вкладке «Свойства товара». Массовое ручное начисление/списание бонусных монет с баланса пользователей. В компонент добавлен пересчет бонусов к начислению и списанию и соответственно пересчет общей суммы заказа с учетом списываемых бонусных монет и стоимости доставки при редактировании заказа в панели управления сайтом! Добавлена настройка количественного отношения бонусной монеты к валюте магазина с показом пользователю сколько одной единице бонусной монеты будет приходиться частей(1, 0.1, ...) валюты магазина.в версии 1.1.9 будет добавлено: Регистрация по рефссылке в дополнение к регистрации по персональному промокоду пригласившего. Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 0
18 мая 2020, 23:21 По просьбам пользователей в версии 1.1.7 добавлено: Две настройки приветственного бонуса при регистрации: Само количество бонусных монет зачисляемых на баланс покупателя при регистрации (по умолчанию 0). Флаг зачисления приветственных бонусов только в том случае если введен валидный промокод пригласившего, что усилит мотивацию ввода промокода пригласившего! Новые дополнения и их версии / Встречайте первый компонент реферально-бонусной программы для miniShop2 - msReferralProgramCoin 60 +1
Возможно ли реализовать возможность предоплаты за доставку на сайте? Так ради этого мне и нужно это все, чтобы клиент платил сразу при оформлении заказа, чтобы избавить себя от мусорных заявок (когда человек оставляет заявку, а предоплату делать не ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 18 px. Да и текст комментариев можно таким сделать. Для меня лично 16 — мелковато на больших экранах (в комментариях вообще 15 ...
MiniShop3 1.11.0 при клике на radio идет пересчет итоговой суммы в orderUI, в зависимости от способов(оплаты доставки) я так поняла. попробуй код запуска события поставить ниже чем orderUI, после
ImageOptimizer - WebP/AVIF и responsive <picture> для MODX 3 Дополнение доступно modstore.pro/packages/photos-and-files/imageoptimizer
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Добавил localizator3_default_language
msInShopNotify Начиная с версии 3.0.0-beta добавлена поддержка MiniShop3 Минимальные требования: PHP 8.4 MODX 3.2 MiniShop3
MaxNotify Обновление 1.2.0-pl (03.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет `maxNotifyFormIt`; — добавлены уведомления о заявках SendIt через hook-...
[msBonus2] 1.3.0 Бонус-коды, уведомления о сгорании и совместимость с msMultiCurre... Да, планируется. Даже чуть больше, чем просто бонусная система)
здесь теперь реализовано от ИД пользователя из заказа
файл:
новое содержимое файла:
Стоит начать с того чтобы зайти через другой браузер попробовать.
Да, и лог ошибок можно посмотреть, может там что есть.
без TV всё работает?
передал по твшкам спецу так как сам твшки не пользую я больше по бэку
плюс ко всему мною созданная архитектура этой автоматизации работает полностью в реальном времени и более того в 1с уже все включая менеджеров лезут только за отчетами так как всё создается и пересоздается автоматически по данным црм(заказы, оплата, реализации… и из розничных точек из ТСД(терминал сбора данных)заказы летят через 1С в црм и дальше там обрабатываются и в реальном времени обновляются в 1С и на сайте(резервы и остатки напряую нативным кодом 1С практически в реальном времени по пакетному АПИ написанному мной для сайта плюс на сайте мной реализована проверка остатка по АПИ црм при создании заказа из корзины так как в црм чуть быстрее чем на сайте происходит обновление остатка за минусом резерва прилетевшего из црм заказа в 1с тут-же отражается в црм по нему 1Сный резерв!) так как создан мной вебсервис в 1С и 1С поднята как вебсервер принимая хуки изменения сразу из црм...) и даже заказы поставщикам и перемещения по складам моими обработками создаются по расписанию по уникальным алгоритмам вычисления потребности по каждой категории товаров
о каком заработке идет речь?
в компоненте реализованы как сниппеты самого механизма учета так и сниппеты вывода информации о текущем проценте кешбэка покупателя и количества его монет, а также количество и процент вы можете у каждого пользователя видеть и руками поменять в панели управления сайтом на странице самого компонента.
- Две настройки приветственного бонуса при регистрации:
- Само количество бонусных монет зачисляемых на баланс покупателя при регистрации (по умолчанию 0).
- Флаг зачисления приветственных бонусов только в том случае если введен валидный промокод пригласившего, что усилит мотивацию ввода промокода пригласившего!
- Для простоты установки и контроля флаг участия товара в бонусной программе кешбэка добавлен в саму таблицу товаров в дополнение к чекбоксу на вкладке «Свойства товара».
- Массовое ручное начисление/списание бонусных монет с баланса пользователей.
- В компонент добавлен пересчет бонусов к начислению и списанию и соответственно пересчет общей суммы заказа с учетом списываемых бонусных монет и стоимости доставки при редактировании заказа в панели управления сайтом!
- Добавлена настройка количественного отношения бонусной монеты к валюте магазина с показом пользователю сколько одной единице бонусной монеты будет приходиться частей(1, 0.1, ...) валюты магазина.
в версии 1.1.9 будет добавлено: