Magento:如何将结账页折扣码选项移至订单摘要区域后?
搞定Magento结账折扣码位置迁移问题!
嘿,我知道你之前改了核心文件里的afterMethods配置没生效,这大概率是因为没找对正确的布局容器,而且直接改vendor文件也不是Magento推荐的做法,容易被升级覆盖或者因优先级问题导致不生效。下面给你一套靠谱的解决方案:
第一步:别碰核心文件!用自定义布局重写
不管你是用自定义主题还是模块,都在view/frontend/layout目录下新建或者修改checkout_index_index.xml文件,把下面的代码放进去:
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="checkout.root"> <arguments> <argument name="jsLayout" xsi:type="array"> <item name="components" xsi:type="array"> <item name="checkout" xsi:type="array"> <item name="children" xsi:type="array"> <item name="steps" xsi:type="array"> <!-- 先把原来 shipping 步骤里的折扣码组件禁用掉 --> <item name="shipping-step" xsi:type="array"> <item name="children" xsi:type="array"> <item name="shipping" xsi:type="array"> <item name="children" xsi:type="array"> <item name="afterMethods" xsi:type="array"> <item name="children" xsi:type="array"> <item name="discount" xsi:type="array"> <item name="config" xsi:type="array"> <item name="componentDisabled" xsi:type="boolean">true</item> </item> </item> </item> </item> </item> </item> </item> </item> <!-- 把折扣码组件加到支付步骤的订单摘要后面 --> <item name="payment-step" xsi:type="array"> <item name="children" xsi:type="array"> <item name="payment" xsi:type="array"> <item name="children" xsi:type="array"> <item name="after-order-summary" xsi:type="array"> <item name="children" xsi:type="array"> <item name="discount" xsi:type="array"> <item name="component" xsi:type="string">Magento_SalesRule/js/view/payment/discount</item> <item name="children" xsi:type="array"> <item name="errors" xsi:type="array"> <item name="sortOrder" xsi:type="string">0</item> <item name="component" xsi:type="string">Magento_SalesRule/js/view/payment/discount-messages</item> <item name="displayArea" xsi:type="string">messages</item> </item> </item> <item name="sortOrder" xsi:type="string">10</item> </item> </item> </item> </item> </item> </item> </item> </item> </item> </item> </item> </argument> </arguments> </referenceBlock> </body> </page>
为什么你之前的修改没生效?
- 直接改vendor文件:Magento的布局合并规则是自定义主题/模块的布局优先级更高,你改核心文件的内容很容易被覆盖,而且下次升级Magento后修改就丢失了。
- 没处理原组件:你只想着往新位置加组件,但原来shipping步骤里的折扣码还会显示,而且你没找对支付步骤里正确的目标容器
after-order-summary——这才是订单摘要后方的专属区域。
最后验证一下
做完上面的操作后,别忘了:
- 清理缓存:执行命令
bin/magento cache:clean和bin/magento cache:flush - 生产模式下要部署静态资源:
bin/magento setup:static-content:deploy -f - 刷新结账页面,切换到支付步骤,就能看到「应用折扣码」乖乖出现在订单摘要后面啦!
对了,要是你用的是Magento 2.4.x版本,记得测试下折扣码的应用、取消功能,确保金额计算没问题哦。
内容的提问来源于stack exchange,提问作者athreya
相关产品推荐
相关产品推荐

