Magento 2过滤基于产品属性的运输方法

时间:2016-06-13 19:00:17

标签: php magento magento2

我是Magento 2的新手。任何人都知道如何根据购物车中产品的属性禁用送货方式。我们想说我们只想为某些产品启用商店取货。 在单页结账时,这些是使用post / rest / en / V1 / guest-carts / SESSION_ID / estimate-shipping-methods更新的,但尝试了模块结帐和模块引用,但仍无法找到此代码的位置所以我可以扩展它。 如果以前有人通过这个会很有帮助。

由于

1 个答案:

答案 0 :(得分:4)

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

基本逻辑流程是......

collectRates() (\ Magento \ Shipping \ Model \ Shipping中的未修改功能,收集所有送货方式的费率)

afterCollectRates() (插件)

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


根据您计算费率的方式,您可能还需要扩展各种运输方式,以便在某些产品放入购物车时可以完全绕过它们(可能不适用于您的使用案例,但适用于任何试图禁用UPS / FedEx /等的人)。率)


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