Я захожу в Magento 2 Admin> Маркетинг> Акции> Правила цены корзины и создаю новое правило: Банковский перевод Оплата:
Информация о правиле табуляции:
- Название правила: банковский перевод
- Статус: Активен
- Сайты: Главный сайт
- Группы клиентов: выбрать все
- Купон: нет купона
- Использует на клиента: 0
- От: пусто
- До: пусто
- Приоритет: 0
- Публичный в RSS-канал: нет
Вкладка «Условия»:
- Если ВСЕ эти условия истинны:
- Способ оплаты - банковский перевод
Вкладка Действия:
- Применить: процент от цены товара со скидкой
- Размер скидки: 2
- Максимальная Кол-во Скидка применяется к: 0
- Скидка Кол-во Шаг (Купить X): 0
- Применить к сумме доставки: нет
- Отменить последующие правила: нет
- Бесплатная доставка: нет
- Примените правило только к элементам корзины, соответствующим следующим условиям (оставьте пустым для всех элементов): ничего
Затем я включаю метод оплаты банковским переводом, перехожу на страницу оформления заказа, нажимаю «Оплата банковским переводом», но цена скидки в процентах не отображается в сводке заказа.
Пожалуйста, дайте мне совет. Как сделать скидку на способ оплаты на Magento 2. Для Magento 1 он работает хорошо.
Огромное спасибо
Ответы:
Это правило не работает, потому что Magento 2 не сохраняет способ оплаты для котировки при выборе. И это также не перезагружает итоги при выборе способа оплаты. И, к сожалению, вам нужно написать собственный модуль для решения проблемы.
Для создания нового модуля нужно всего 4 файла:
Приложение / код / пространство имен / ModuleName / и т.д. / интерфейс / routes.xml
Это определит новый контроллер для нашего модуля.
Приложение / код / пространство имен / ModuleName / контроллер / Checkout / ApplyPaymentMethod.php
Этот файл создает действие контроллера для сохранения выбранного способа оплаты в котировке.
Приложение / код / пространство имен / ModuleName / просмотр / интерфейс / requirejs-config.js
Этот файл позволяет переопределить
Magento_Checkout/js/action/select-payment-method
файлПриложение / код / пространство имен / ModuleName / вид / интерфейс / веб / JS / действие / выбрать-оплаты-method.js
Отправляет ajax-запрос, чтобы сохранить способ оплаты и перезагрузить итоги корзины.
PS Части кода были взяты из расширения « Платежная плата» для Magento 2.
источник
На Magento 2.2 я не мог получить ответ MagestyApps на работу. Мне нужно было добавить несколько дополнительных файлов. Так как:
\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address\PaymentMethod::generateFilterText
(на самом деле он возвращается\Magento\AdvancedSalesRule\Model\Rule\Condition\FilterTextGenerator\Address::generateFilterText
) ожидал, что данныеpayment_method
будут установлены по адресам котировки;payment_method
данных по адресам котировки не сработало, когда котировка стала заказом, потому что она не сохраняетсяpayment_method
;Следующий модуль сработал для меня (благодаря ответу MagestyApps, он был основан на этом):
registration.php
и т.д. / module.xml
и т.д. / di.xml
и т.д. / интерфейс / routes.xml
Контроллер / Checkout / ApplyPaymentMethod.php
Модель / Rule / Состояние / FilterTextGenerator / Адрес / PaymentMethod.php
Плагин / AddPaymentMethodOptionBack.php
просмотр / интерфейс / requirejs-config.js
вид / интерфейс / веб / JS / действие / выбор-оплата-method.js
источник
Fatal error: Class 'Magento\AdvancedSalesRule\Model\Rule\Condition\Address\PaymentMethod' not found in Vendor/SalesRulesPaymentMethod/Model/Rule/Condition/FilterTextGenerator/Address/PaymentMethod.php on line 7
. Я даже пытался изменить AdvancedSalesRule на SalesRule, поскольку вижу, что в Magento 2.2.2 нет модели AdvancedSalesRuleМы только что проверили то же правило и обнаружили, что оно не работает. При тех же условиях никакая информация о выбранном выбранном методе не отправляется, и она нигде не записывается, пока не будет размещен заказ и правило может не работать.
У адреса нет способа оплаты до проверки, и он получает метод оплаты из платежного предложения, которое не существует, потому что информация не была отправлена (
$model->getQuote()->getPayment()->getMethod()
возвращаетсяnull
).Мы предполагаем, что это ошибка Magento. При выборе способа оплаты информация должна быть отправлена заранее.
источник
Решение с пользовательским модулем работает.
Я просто подумал, что для новичков в Magento было бы полезно узнать, что вам также нужно добавить эти файлы, чтобы иметь возможность добавлять и включать этот модуль:
(скопируйте из другого модуля и измените файлы в соответствии с именем вашего модуля и пространством имен)
тогда вы сможете бежать
bin/magento setup:upgrade
источник
я создал файлы и заменил пространства имен и имя модуля, но я думаю, что мои файлы не будут выполнены.
Может быть ошибка в моих файлах ??
registration.php
composer.json
}
module.xml
источник
на самом деле переопределение файлов ядра magento не очень хорошая идея. Вместо переопределения
Magento_Checkout/js/action/select-payment-method
лучше создайте для него миксин. И вы можете продать его, не создавая новый контроллер. Смотрите ниже (в дополнение к ответу @magestyapps)Приложение / код / пространство имен / ModuleName / просмотр / интерфейс / requirejs-config.js
Приложение / код / пространство имен / ModuleName / вид / интерфейс / JS / выписка / действия / выбор-оплата-метод-mixin.js
источник
Проверьте решение в следующем посте:
https://meetanshi.com/blog/solution-discount-based-on-payment-method-not-showing-in-magento-2-cart-total/
источник