Обновление стоимости доставки в админке
Бывает иногда необходимо изменить способ доставки и стоимость доставки у ранее созданного заказа. И хотелось бы чтобы это выглядело так.

Приступим :)
Решений данного вопроса несколько:
1) Харкордно менять стоимость доставки (https://modx.pro/solutions/6233-change-the-delivery-minishop2/) — такое решение мне не по душе, да и ломать фиксирующие статусы не хотелось.
2) Создавать заказ с новыми данными от лица пользователя — мне кажется такой вариант необходим в случае когда используются классы доставки с динамичным расчетом, в котором требуются конкретные данные от пользователя в реальном времени.
В моем случае у меня есть несколько кастомных классов доставки, которые считают стоимость тривиальным способом и отсутствие обновления стоимости удручало :(
Выкладываю рецепт своего творения:
PS
На лавры не претендую, спасибо vgrish за подсказку, уважаемому сообществу в целом за знания, авторам проекта за возможность делится данными знаниями :)
Выкладываю «как есть», постарался реализовать так, чтобы возможно было использовать с вашими кастомными классами доставки или заказов. Решение по-любому необходимо подшлифовать под ваш проект.
PSPS
Буду благодарен конструктивным комментариям от опытных разработчиков
Рейтинга не хватает, чтобы разместить рецепт в готовых решениях :(

Приступим :)
Решений данного вопроса несколько:
1) Харкордно менять стоимость доставки (https://modx.pro/solutions/6233-change-the-delivery-minishop2/) — такое решение мне не по душе, да и ломать фиксирующие статусы не хотелось.
2) Создавать заказ с новыми данными от лица пользователя — мне кажется такой вариант необходим в случае когда используются классы доставки с динамичным расчетом, в котором требуются конкретные данные от пользователя в реальном времени.
В моем случае у меня есть несколько кастомных классов доставки, которые считают стоимость тривиальным способом и отсутствие обновления стоимости удручало :(
Выкладываю рецепт своего творения:
- Открываем файл /assets/components/minishop2/js/mgr/misc/ms2.combo.js, находим:
Меняем на:miniShop2.combo.Delivery = function (config) { .... }; Ext.extend(miniShop2.combo.Delivery, MODx.combo.ComboBox); Ext.reg('minishop2-combo-delivery', miniShop2.combo.Delivery);
miniShop2.combo.Delivery = function (config) { config = config || {}; Ext.applyIf(config, { name: 'delivery', id: 'minishop2-combo-delivery', hiddenName: 'delivery', displayField: 'name', valueField: 'id', fields: ['id', 'name'], pageSize: 10, emptyText: _('ms2_combo_select'), url: miniShop2.config['connector_url'], baseParams: { action: 'mgr/settings/delivery/getlist', combo: true }, listeners: { render: function () { this.store.on('load', function (store) { if (store.getTotalCount() == 1 && store.getAt(0).id == this.getValue()) { this.readOnly = true; this.wrap.addClass('disabled'); } else { this.readOnly = false; this.wrap.removeClass('disabled'); } }, this); }, select: function (combo, row) { var payments = Ext.getCmp('minishop2-combo-payment'); var deliveryCost = Ext.getCmp('delivery_cost'); var store = payments.getStore(); payments.setValue(''); store.baseParams.delivery_id = row.id; store.load(); MODx.Ajax.request({ url: this.config.url, params: { action: 'mgr/delivery/getcost', delivery_id: row.id, order_id: config.order_id }, listeners: { success: { fn: function ® { var w = Ext.getCmp('minishop2-window-order-update'); w.setValues(r.object); }, scope: this }, failure: { fn: function (response) { MODx.msg.alert(_('error'), response.message); }, scope: this } } }); } } }); miniShop2.combo.Delivery.superclass.constructor.call(this, config); }; Ext.extend(miniShop2.combo.Delivery, MODx.combo.ComboBox); Ext.reg('minishop2-combo-delivery', miniShop2.combo.Delivery);
- Открываем файл /assets/components/minishop2/js/orders/orders.window.js, находим:
меняем на:items: [{ xtype: 'displayfield', name: 'cost', fieldLabel: _('ms2_order_cost'), anchor: '100%', style: 'font-size:1.1em;' }]
— ищем:items: [{ xtype: 'textfield', name: 'cost', fieldLabel: _('ms2_order_cost'), anchor: '100%', style: 'font-size:1.1em;text-align: center; border: 0;', fieldClass: '', cls: '', ctCls: '', readOnly: true, listeners: { afterrender: function() { this.removeClass('x-form-text') } } }]
меняем на:items: [ {xtype: 'displayfield', name: 'createdon', fieldLabel: _('ms2_createdon'), anchor: '100%'}, {xtype: 'displayfield', name: 'delivery_cost', fieldLabel: _('ms2_delivery_cost'), anchor: '100%'} ]
Вот если что целиком: gist.github.com/romanlex/341d523ad5baa6fb095d77f2e88ef3a9items: [ {xtype: 'displayfield', name: 'createdon', fieldLabel: _('ms2_createdon'), anchor: '100%'}, { xtype: 'textfield', name: 'delivery_cost', fieldLabel: _('ms2_delivery_cost'), anchor: '100%', enableKeyEvents: false, fieldClass: '', cls: '', ctCls: '', style: 'text-align: center; border: 0', readOnly: true, listeners: { afterrender: function() { this.removeClass('x-form-text') } } } ]
- Создаем процессор по пути /core/components/minishop2/processors/mgr/delivery/getcost.class.php со следующим содержимым: gist.github.com/romanlex/7107f58ad93186ca771ac5964eaee627
PS
На лавры не претендую, спасибо vgrish за подсказку, уважаемому сообществу в целом за знания, авторам проекта за возможность делится данными знаниями :)
Выкладываю «как есть», постарался реализовать так, чтобы возможно было использовать с вашими кастомными классами доставки или заказов. Решение по-любому необходимо подшлифовать под ваш проект.
PSPS
Буду благодарен конструктивным комментариям от опытных разработчиков
Рейтинга не хватает, чтобы разместить рецепт в готовых решениях :(
- ВКонтакте
- Telegram
- Viber
- РЎРєРѕРїРСвЂВВВВВВВВровать ссылку
18
5 877
+4
Комментарии: 4
09 июля 2020, 15:00
Есть у кого-нибудь содержимое процессора? Или пример динамического изменения значения поля при смене статуса заказа или способа доставки?
06 апреля 2021, 23:02
Автор, действительно, решение нужное, выложи, пожалуйста, процессор!!!
06 апреля 2021, 23:21
Появилось вот такое решение — Делаем стоимость доставки у заказа в админке редактируемым полем
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Здесь упомянуты:
Компонент | Текущая версия | Закачки |
miniShop2 | 4.4.0-pl от 06.08.2024 | 26 389 |
Вчера в 21:11
Здравствуйте
Есть желание использовать компонент polylang для автоматизации перевода с наименьшими усилиями, но есть пару вопросов, которые хотелось ...
Polylang 143
Вчера в 16:30
Добрый день.
Удалите плагин vpSystem от пакета.
[VirtualPage] - Виртуальные страницы. 183
Вчера в 08:40
Хочестя в тикеты при сохранении комментария добавить кнопку «проверить на ошибки» и при нажатии на нее проверить комментарий на ошибки в нейросети сох...
pbStudio: Создаём сайт с PageBlocks – настройка и главная страница 6
Вчера в 08:36
Нет, через апи идет запрос в ChatGPT, который формирует необходимые данные о блоке, а дальше PageBlocks их разбирает и создает все нужные элементы.
PageBlocks 2.6.0. Настройка меню MODX и гибкое управление страницей пользователя 12
Вчера в 00:03
Не работает парсинг с vk.com, vkvideo.ru
[videoGallery] 1.4.0 Поддержка VK Video и ещё пара фишек 9
17 апреля 2025, 23:01
Можете тоже подсказать как победить данную ошибку?
msGallerySearch - загрузка изображений в галерею minishop2 по ссылке и Google поиск картинок 44
17 апреля 2025, 21:35
Действительно! Самого главного я и не обозначил! Спасибо! Поправлю заголовок.
Речь идет именно о панели менеджера и возможности управления заказами.
...
Вывод перечня заказанных товаров в таблицу с заказами minishop2 (панель менеджера) 8
17 апреля 2025, 17:49
Очевидно ты используешь источник файлов, поэтому в админке путь прописан от источника, хочешь полный путь, откажись от источника файлов.
Не открываются загруженные файлы пишет страница не найдена 2
17 апреля 2025, 15:08
Привет, Henk. Спасибо за ответ! В посте по ссылке меня больше всего заинтересовала фраза «мы интегрировали AI в медиа-менеджер, чтобы значительно упро...
MODX/AI Hackathon Part 2 (27 марта) 4
17 апреля 2025, 13:17
в preg_match проверка проходит, и туда 100% приходит url
Здравствуйте! Первый раз такое вижу, у слеша, не 1 символ в строке, а 9!! Как это делает MODX 2