【问题标题】:Magento 2 Filter Shipping Methods based on Product AttributeMagento 2 根据产品属性过滤运输方式
【发布时间】:2016-10-14 07:32:42
【问题描述】:

我是 Magento 2 的新手。任何人都知道根据购物车中产品的属性禁用运输方式的方法。假设我们只想为某些产品启用商店提货。 在单页结帐时,这些已更新为帖子 /rest/en/V1/guest-carts/SESSION_ID/estimate-shipping-methods 但尝试了模块结帐和模块报价,但仍然找不到此代码的位置,所以我可以扩展它。 如果有人以前经历过这个会很有帮助。

谢谢

【问题讨论】:

    标签: php magento magento2


    【解决方案1】:

    可能不止一种方法可以实现这一点,但我选择的方法是为 \Magento\Shipping\Model\Shipping 创建一个插件,特别是 collectRates() 功能。我们的要求比您的要求更具体(在底部)。

    基本逻辑流程是……

    collectRates() (\Magento\Shipping\Model\Shipping 中未修改的函数,收集所有运输方式的费率)

    afterCollectRates() (插件)

    • 此时,所有运输方法都已调用,并且费率已存储在我们的 $request 对象中。
    • 您可以通过 $request->getAllItems() 确定购物车中的产品
      • 注意:子/父产品是单独的商品,根据您的商店配置,其中一个或另一个可能没有您想要查看的自定义属性。
    • 您可以通过 $request->getResult()->getAllRates() 查看所有运输方式/费率
    • 我没有找到删除速率的核心函数,我的解决方法是...
      • 取消设置要删除的速率中的所有数据
      • 修改所有费率后,使用 foreach() 循环将它们存储在 tempArray 中(如果 cost==0 等,则不添加一些逻辑)
      • 现在通过 $request->getResult()->reset() 刷新和重置所有现有费率
      • 最后,将 tempArray 中的费率添加回


    根据您计算费率的方式,您可能还希望扩展各种运输方式,以便在某些产品在购物车中时完全绕过它们(可能不是针对您的用例,而是针对任何试图禁用 UPS/FedEx/等的人)。费率)


    如前所述,我们的需求更广泛,我们还有一个 beforeCollectRates() 函数,它实际上创建了产品数组和一些其他逻辑(我们必须限制各种运输方式,为特定产品添加处理,并使用维度逻辑来创建列表实际 CollectRates() 部分发送到 UPS/FedEx 等的运输箱。)

    【讨论】:

    • 嗨@mtns_cll,我正在寻找您的解决方案,但如果可能的话,我还需要进一步的帮助。您能否检查一下这个问题magento.stackexchange.com/questions/238223/…,如果您对如何解决它有任何想法,请告诉我?谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多