13 марта 2019, 12:06 Добрый день, попробуйте создать заказ через процессор, я например так и делаю по аяксу. Пример рабочего процессора: class orderCreate extends modProcessor { public $name; public $phone; public $street; public $building; public $room; public $city; public $email; public $user_id; public $cost; public $createdon; public $object; public $order; /* @var pdoTools $pdo */ protected $pdo; protected $toEmail; protected $prod_id; protected $ms2; protected $alias_id; public function initialize() { $this->pdo = $this->modx->getService('pdoTools'); $this->ms2 = $this->modx->getService('miniShop2'); $this->createdon = date('Y-m-d H:i:s'); $this->name = trim(htmlspecialchars($_POST['name'])); $this->phone = trim(htmlspecialchars($_POST['phone'])); $this->email = trim(htmlspecialchars($_POST['email'])); $this->city = trim(htmlspecialchars($_POST['city'])); $this->street = trim(htmlspecialchars($_POST['street'])); $this->building = trim(htmlspecialchars($_POST['building'])); $this->room = trim(htmlspecialchars($_POST['room'])); $this->prod_id = (int)trim(htmlspecialchars($_POST['id'])); if (!$this->object = $this->modx->getObject('modResource', $this->prod_id)){ return $this->failure('Такого товара не существует'); } return parent::initialize(); } public function process() { $create = $this->createOrder(); if ($create != true) { return $this->failure($create); } return $this->success('Заказ успешно создан'); } public function createOrder() { $order = $this->modx->newObject('msOrder'); $order->fromArray([ 'num' => $this->getNum(), 'user_id' => $this->getCustomerId(), 'createdon' => $this->createdon, 'delivery' => 1, 'payment' => 1, 'email' => $this->email, 'cart_cost' => $this->object->get('price'), 'cost' => $this->object->get('price'), 'status' => 1, 'context' => 'web' ]); $this->beforeSave($order); if (!$order->save()) { return 'Ошибка создания заказа'; } $this->ms2->changeOrderStatus($order->get('id'), 1); return true; } public function getCustomerId() { if ($this->modx->user->isAuthenticated()) { $profile = $this->modx->user->Profile; if (!$profile->get('email')) { $profile->set('email', $this->email); $profile->save(); } $uid = $this->modx->user->id; } else { if ($user = $this->modx->getObject('modUser', array('username' => $this->email))) { $uid = $user->get('id'); } elseif ($profile = $this->modx->getObject('modUserProfile', array('email' => $this->email))) { $uid = $profile->get('internalKey'); } else { /** @var modUser $user */ $user = $this->modx->newObject('modUser', array('username' => $this->email, 'password' => md5(rand()))); $profile = $this->modx->newObject('modUserProfile', array( 'email' => $this->email, 'fullname' => $this->name, )); $user->addOne($profile); /** @var modUserSetting $setting */ $setting = $this->modx->newObject('modUserSetting'); $setting->fromArray(array( 'key' => 'cultureKey', 'area' => 'language', 'value' => $this->modx->getOption('cultureKey', null, 'en', true) ),'', true); $user->addMany($setting); $user->save(); if ($groups = $this->modx->getOption('ms2_order_user_groups', null, false)) { $groups = array_map('trim', explode(',', $groups)); foreach ($groups as $group) { $user->joinGroup($group); } } $uid = $user->get('id'); } } return $uid; } public function beforeSave(msOrder $order){ $addressArray = [ 'receiver' => $this->name, 'phone' => $this->phone, 'email' => $this->email, 'city' => $this->city, 'street' => $this->street, 'building' => $this->building, 'room' => $this->room ]; /** @var msOrderAddress $address */ $address = $this->modx->newObject('msOrderAddress'); $address->fromArray(array_merge($addressArray, [ 'user_id' => $this->getCustomerId(), 'createdon' => $this->createdon, ])); $productArr = []; $product = $this->modx->newObject('msOrderProduct'); $product->fromArray([ 'product_id' => $this->prod_id, 'cost' => $this->object->get('price'), 'price' => $this->object->get('price'), 'name' => $this->object->get('pagetitle'), ]); $productArr[] = $product; $order->addOne($address); $order->addMany($productArr); } /** * Return current number of order * * @return string */ public function getNum() { $cur = date('ym'); $num = 0; $c = $this->modx->newQuery('msOrder'); $c->where(array('num:LIKE' => "{$cur}%")); $c->select('num'); $c->sortby('id', 'DESC'); $c->limit(1); if ($c->prepare() && $c->stmt->execute()) { $num = $c->stmt->fetchColumn(); } if (empty($num)) { $num = date('ym') . '/0'; } $num = explode('/', $num); $num = $cur . '/' . ($num[1] + 1); return $num; } } return 'orderCreate';Лично мне так удобнее, не знаю как остальным, но решение рабочее. Мы просто используем методы минишоповского класса создания заказа, и будет все точно так же как и при стандартном оформлении, даже сообщение пользователю придет. Вопросы / Что-то не то с формированием заказа через API 19 0 1
12 марта 2019, 23:07 Попробуйте в сниппете msGetOrder поставить в параметр tpl пустую строку, и открыть страницу оформленного заказа, выведутся все доступные плейсхолдеры и в чанке вы их можете вывести. Например: {$placeholder} Вопросы / после оформления заказа 1 0
03 марта 2019, 00:23 У вас походу Fenom включен, после фигурных скобок в вашем коде поставьте пробелы и все заработает. Скорее всего вы в шаблоне или в чанке js прописали, там как раз они есть Вопросы / Ошибка pdotools при обработке документов с типом "статический ресурс" 6 0
03 марта 2019, 00:20 Не совсем понятно, что вы хотите этим условием добиться Вопросы / Условие вызова pdoMenu 13 0
23 февраля 2019, 23:57 Я постоянно сталкиваюсь с задачами, решаю их и думаю, блин а как же круто было написать дополнение на основе этого, а потом смотрю, уже это придумали давным — давно. Единственное на что меня хватает, так это на какие-то готовые мини решения, которые я здесь публикую. А вообще я восхищаюсь, штамповать такое количество дополнение почти каждую неделю, это еще нужно постараться, респект, короче, есть на кого равняться :) Новые дополнения и их версии / msPriceList - Управление прайс-листами minishop2 10 0
23 февраля 2019, 22:08 Андрей, ты просто нескончаемый генератор идей, как у тебя это получается? Делись секретами :D Дополнение крутое, молодец :) Новые дополнения и их версии / msPriceList - Управление прайс-листами minishop2 10 0
18 февраля 2019, 23:08 Не плохо. Сейчас работаю над похожим проектом, только заказчик требует очень подробную статистику по заказам, товарам, какие товары зарезервированы пользователем, а какие нет, короче много всякой инфы и я решил делать такую црмку на Ларке, спустя месяц работы могу сказать, что MODX прекрасно работает вместе с Laravel и довольно шустро, мне кажется фронтенд статистику лучше делать на Ларе, чисто мое мнение. Готовые решения / Список наиболее покупаемых товаров minishop2 10 0
04 января 2019, 14:34 Он не вызывается, а помещается в переменную, потом его можно вызывать. Мой способ уже не актуален, так как ему нужно по публикации выводить. Вопросы / Скрыть чанк, если ресурс не опубликован 29 0
04 января 2019, 13:47 1 — означает опубликован. Я не пользовался стандартным синтаксисом уже сто лет, так что понятия не имею, просто включите феном и попробуйте, вы можете использовать два шаблонизатора Вопросы / Скрыть чанк, если ресурс не опубликован 29 0
04 января 2019, 13:17 В таком случае {if $_modx->resource.publishedon == 1}Содержимое{/if}Но лучше первый вариант, если нет ресурсов, то ничего не выведет. Вопросы / Скрыть чанк, если ресурс не опубликован 29 0
04 января 2019, 13:11 Лучше всего это делать на Fenom. Если я правильно понял ваш вопрос {set $news = '!pdoResources'|snippet:[ 'parents' => 'айди ресурса с новостями' ]} {if $news} {$news} {*Здесь вызываем сниппет*} {/if} Вопросы / Скрыть чанк, если ресурс не опубликован 29 0
20 декабря 2018, 00:40 Скорее всего это из-за какого-то расширения. У меня была похожая проблема. Установил MusVk и словил такой конфликт, удалите некоторые расширения и проверьте. Вопросы / Бесконечное сохранение ресурсов в Modx 2.6.5 24 +2
19 декабря 2018, 19:56 в 8 утра Пошаговые инструкции / Динамическое обновление цены товара miniShop2 по курсу доллара, через Cron. 27 +2
19 декабря 2018, 15:18 фунцкией floor() попробуйте, она округляет в меньшую сторону Пошаговые инструкции / Динамическое обновление цены товара miniShop2 по курсу доллара, через Cron. 27 +3
19 декабря 2018, 15:03 Спасибо, но уже три месяца это работает и ни разу не было проблем. Как возникнут, сразу вспомню ваши слова :) Пошаговые инструкции / Динамическое обновление цены товара miniShop2 по курсу доллара, через Cron. 27 +2
19 декабря 2018, 14:27 У ЦБ есть определенный лимит подключений в определенный промежуток времени, не думаю, что стоит делать больше одного запроса в ЦБ. Я это уже проверял. Пошаговые инструкции / Динамическое обновление цены товара miniShop2 по курсу доллара, через Cron. 27 +2
19 декабря 2018, 13:23 Я рад :) Пошаговые инструкции / Динамическое обновление цены товара miniShop2 по курсу доллара, через Cron. 27 +2
Возможно ли реализовать возможность предоплаты за доставку на сайте? Так ради этого мне и нужно это все, чтобы клиент платил сразу при оформлении заказа, чтобы избавить себя от мусорных заявок (когда человек оставляет заявку, а предоплату делать не ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 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... Да, планируется. Даже чуть больше, чем просто бонусная система)
Пример рабочего процессора:
Лично мне так удобнее, не знаю как остальным, но решение рабочее.
Мы просто используем методы минишоповского класса создания заказа, и будет все точно так же как и при стандартном оформлении, даже сообщение пользователю придет.
Например:
Дополнение крутое, молодец :)