CustomizeCheckout定制化结账流程
这边文章包含定制化已经存在的checkout步骤视图的基本信息。在Magento中,结账流程是用UI组件来实现的。你可以通过改变js实现或者模版的方式来改变。添加,禁用,移除一个组件。
想要改变组件.js的实现和模版文件,你需要先在结账布局文件里面声明你的文件。请参照以下步骤:
1.在你的模块里面,创建以下文件:
<your_module_dir>/view/frontend/layout/checkout_index_index.xml (问了定制化能顺利工作,你需要声明你的模块依赖于Magento_Checkout模块)。
2.在这个文件里,添加以下内容:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body>
<referenceBlock name="checkout.root">
<arguments>
<argument name="jsLayout" xsi:type="array">
<!-- Your customization will be here -->
...
</argument>
</arguments>
</referenceBlock>
</body>
</page>
在<Magento_Checkout_module_dir>/view/frontend/layout/checkout_index_index.xml文件,找到你要定制化的组件。找到对应的节点以及该节点的父节点,直到<argument>.你不一定要保留父节点的所有节点和值如果你不需要更改它们。
改变对应的组件的js文件,模版或者其它属性。
例如:
Magento_Shipping模块为Shipping步骤的Shipping Policy添加一个组件,该组件会被渲染成一个链接:<Magento_Shipping_module_dir>/view/frontend/layout/checkout_index_index.xml
是这样的:
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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">
<item name="children" xsi:type="array">
<item name="shipping-step" xsi:type="array">
<item name="children" xsi:type="array">
<item name="shippingAddress" xsi:type="array">
<item name="children" xsi:type="array">
<item name="before-shipping-method-form" xsi:type="array">
<item name="children" xsi:type="array">
<item name="shipping_policy" xsi:type="array">
<item name="component" xsi:type="string">Magento_Shipping/js/view/checkout/shipping/shipping-policy</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
</body>
</page>
把新的组件添加到 checkout页面的layout文件。
为了使父组件能够正确加载,请确保你声明了该组件。如果一个父组件是一个通用的UI组件(在uiComponent alias引用),他的子组件被渲染是不会受到任何限制。但是,如果父组件是通用组件的一个扩展,那么子组件的渲染就有可能在某些方面收到限制。比如,,一个组件只在某个displayArea 被渲染。
移动一个组件:
想要移动checkout页面的任何组件,找到组件需要被放的位置,然后粘贴你的组件为该组件的一个子组件。
以下例子展示如何移动折扣组件到订单总结模块,该总结页面会在shipping 和billing 步骤展示。
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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="sidebar" xsi:type="array">
<item name="children" xsi:type="array">
<item name="summary" xsi:type="array">
<item name="children" xsi:type="array">
<item name="summary-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>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
</body>
</page>
禁用一个组件:
12
3
4
5
<item name="%the_component_to_be_disabled%" xsi:type="array"> <item name="config" xsi:type="array">
<item name="componentDisabled" xsi:type="boolean">true</item>
</item>
</item>
移除一个组件:
想要从页面渲染中移除一个组件,你需要为MagentoCheckoutBlockCheckoutLayoutProcessor::process方法创建一个plugin(插件)。在你的插件里,使用around方法在运行时把对应的layout节点移除掉。
以下是使用around方法移除组件的一个示例:
12
unset($jsLayout["components"]["checkout"]["children"]["steps"][%path_to_target_node%]); //%path_to_target_node% is the path to the component"s node in checkout_index_index.xmlreturn $jsLayout;
如果想要在你的代码里使用这个示例,请把%path_to_target_node%替换成真实值。
在你的代码里禁用和移除组件的区别:如果禁用一个组件,该组件会被加载但是不会被渲染;如果移除一个组件,它会被移除不会被加载。
以上是 CustomizeCheckout定制化结账流程 的全部内容, 来源链接: utcz.com/z/512343.html