2016-06-13 4 views
5

Я новичок в Magento 2. Кто-нибудь знает, как отключить метод доставки на основе атрибута с продуктами в корзине. Предположим, мы хотим, чтобы магазин был загружен только для определенных продуктов. На одном контрольном контроле они обновляются с помощью сообщений post/rest/en/V1/guest-carts/SESSION_ID/methods-shipping-methods, но попробовали модульную проверку и цитату модуля и до сих пор не могут найти, где этот код я могу продлить его. Было бы полезно, если бы кто-то был до этого.Magento 2 Фильтр Методы доставки, основанные на атрибуте продукта

Благодаря

ответ

2

Наверное, больше, чем один способ сделать это, но мой метод выбора был создать плагин для \ Magento \ Доставка \ Model \ Доставка, в частности collectRates() функция. Наши требования были более конкретными, чем ваши (внизу).

Базовая логика поток ...

collectRates()(Unmodified функции \ Magento \ Доставка \ модель \ Доставка, Собирает ставки для всех способов доставки)

afterCollectRates()(плагин)

  • На данный момент все способы доставки есть пчелу n и ставки, хранящиеся в нашем $ запросе объект.
  • Вы можете определить продукты, которые находятся в корзине через $ request-> getAllItems()
    • Примечание: Дети/Родительские продукты являются отдельными элементами, и в зависимости от вашего магазина конфигурации, один или другие не могут есть пользовательский атрибут, который вы хотите посмотреть.
  • Вы можете увидеть все транспортные методы/цены через $ request-> GetResult() -> getAllRates()
  • я не нашел функцию ядра, чтобы удалить скорость, мой обходной путь был .. .
    • отключенное все данные скорости, чтобы удалить
    • После того, как все цены изменены, использовать Еогеасп() цикл, чтобы хранить их в tempArray (с некоторой логикой, чтобы не добавлять, если стоимость == 0, и т.д. .)
    • Теперь вровень и сбросить все существующие ставки через $ request-> GetResult() -> Сброс()
    • Наконец, добавьте ставки от вашего tempArray назад в


В зависимости о том, как вы вычисляете ставки, вы также можете расширить различные способы доставки, чтобы вы могли полностью обходить их, когда определенные продукты находятся в корзине (вероятно, не для вашего варианта использования, но для тех, кто пытается отключить UPS/FedEx/etc.ставки)


Как уже упоминалось, наши требования были более обширны, и мы также имели функцию beforeCollectRates(), который фактически создал массив продукта и какой-либо другой логики (мы должны были ограничить различные методы доставки, добавить обработку для конкретных продуктов, и использовать размерную логику для создания списка загрузочных ящиков для отправки в UPS/FedEx и т. д. для фактической части CollectRates().)

Смежные вопросы