如何在 Magento 2 中自定义结帐流程
已发表: 2018-04-23目录
在 Magento 2 中,结帐流程经过重新设计,以提供更快、更轻松的体验。 结帐页面引导客户完成该过程的 2 个简单步骤。 登录其帐户的客户可以快速完成结帐,因为大部分信息已经在他们的帐户中。 结账流程的第一步是让客户填写收货地址信息,并选择收货方式。 第二步,客户选择支付方式,并使用任意优惠券完成购买。
自定义 Magento 2 的默认结帐
您可以添加新的结帐步骤或更改现有结帐的视图,以您自己的方式自定义默认结帐。
添加新的结帐步骤
您可以添加自定义结帐步骤,它应该作为 UI 组件实现。 为了兼容性、可升级性和易于维护,不要编辑默认的 Magento 代码,将您的自定义添加到单独的模块中。
步骤 1:创建结帐步骤组件的视图部分
要创建新结帐步骤的视图部分:
- 添加模块目录。 所有自定义文件都必须存储在那里。 为了正确应用您的结帐自定义,您的自定义模块应依赖于
Magento_Checkout
模块。 不要使用Ui
作为您的自定义模块名称,因为指定路径时需要使用%Vendor%_Ui
表示法可能会导致问题。 - 创建实现视图模型的
.js
文件。 - 为组件创建一个
.html
模板。
下面对每个步骤进行详细说明:
1. 添加实现新步骤的 JavaScript 文件
必须将新的结帐步骤实现为 UI 组件。 也就是说,它的 JavaScript 实现必须是一个 JavaScript 模块。
该文件必须存储在<your_module_dir>/view/frontend/web/js/view
目录下。
<your_module_dir>
表示法代表从根目录到模块目录的路径。 通常它将是以下之一: app/code/<YourVendor>/<YourModule>
或vendor/<yourvendor>/module-<module>-<name>
。
带有注释的示例my-step-view.js
如下:
定义( ['ko', 'uiComponent', 'underscore', 'Magento_Checkout / js / model / step - navigator'], 功能( 高, 零件, _, 步进导航器 ) {' 使用严格'; /** * * mystep – 是组件的 .html 模板的名称, * <Vendor>_<Module> – 是您的模块目录的名称。 * */ 返回组件。扩展({ 默认值:{ 模板:'<供应商>_<模块>/mystep' }, //在此处添加您的逻辑以显示步骤, isVisible: ko.observable(true), /** * * @returns {*} */ 初始化:函数(){ this._super(); //注册你的步骤 stepNavigator.registerStep( //步骤代码将用作组件模板中的步骤内容id 'step_code', //步骤别名 无效的, //步骤标题值 '步骤标题', //显示步骤或隐藏步骤时具有逻辑的可观察属性 this.isVisible, _.bind(this.navigate, this), /** * 排序顺序值 * '排序订单值' < 10:发货步骤前显示步骤; * 10 < 'sort order value' < 20 : 显示发货和付款步骤之间的步骤 * '排序顺序值' > 20 : 付款步骤后显示步骤 */ 15 ); 返回这个; }, /** * navigate() 方法负责结帐步骤之间的导航 * 在结帐时。 您可以添加自定义逻辑,例如一些条件 * 用于切换到您的自定义步骤 */ 导航:函数(){ }, /** * @returns 无效 */ 导航到下一步:函数(){ stepNavigator.next(); } }); } );
2.添加.html模板
在模块目录中,为组件添加.html
模板。 它必须位于<your_module_dir>/view/frontend/web/template
目录下。
示例mystep.html
如下:
<!– 应使用 .js 文件中的“step_code”值–> <li data-bind="fadeVisible: isVisible"> <div class="step-title" data-bind="i18n: '步骤标题'" data-role="title"></div> <div class="step-content" data-role="content"> <form data-bind="submit: navigateToNextStep" novalidate="novalidate"> <div class="actions-toolbar"> <div class="primary"> <button data-role="opc-continue" type="submit" class="button action continue primary"> <span><!– ko i18n: '下一个'–><!– /ko –></span> </按钮> </div> </div> </form> </div> </li>
第 2 步:将您的步骤添加到结帐页面布局
对于要在页面上显示的新步骤,您需要在 Checkout 页面布局中声明它,该布局在checkout_index_index.xml
中定义。
因此,您需要在以下位置添加扩展checkout_index_index.xml
布局文件: <your_module_dir>/view/frontend/layout/checkout_index_index.xml
示例checkout_index_index.xml
如下:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <正文> <referenceBlock name="checkout.root"> <参数> <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="my-new-step" xsi:type="array"> <item name="component" xsi:type="string">%Vendor%_%Module%/js/view/my-step-view</item> <!--在发货步骤前显示步骤内容“sortOrder”值应该是<1-> <!--显示发货步骤和付款步骤之间的步骤内容 1 < "sortOrder" < 2 --> <!--支付步骤后显示步骤内容“sortOrder”>2--> <item name="sortOrder" xsi:type="string">2</item> <item name="children" xsi:type="array"> <!–在此处为您的步骤添加子组件声明–> </项目> </项目> </项目> </项目> </项目> </项目> </项目> </参数> </参数> </参考块> </正文> </页面>
Magento 2 结帐自定义字段
$119,00
Magento 2 一步结账
$99 $119,00
自定义现有结帐的视图
在 Magento 应用程序中,结帐是使用 UI 组件实现的。 您可以通过更改组件的 JavaScript 实现或模板、添加、删除或禁用组件来自定义每个步骤。
第 1 步:更改组件的 .js 实现和模板
要更改用于组件渲染的.js
实现和模板,您需要在结帐页面布局中声明新文件。 为此,请执行以下步骤:
- 在您的自定义模块目录中,创建以下新文件:
<your_module_dir>/view/frontend/layout/checkout_index_index.xml
。 (为了正确应用您的结帐自定义,您的自定义模块应该依赖于 Magento_Checkout 模块。) - 在此文件中,添加以下内容:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <正文> <referenceBlock name="checkout.root"> <参数> <argument name="jsLayout" xsi:type="array"> <!– 您的自定义将在这里–> … </参数> </参数> </参考块> </正文> </页面>
- 在
<Magento_Checkout_module_dir>/view/frontend/layout/checkout_index_index.xml
文件中,找到您需要自定义的组件。 复制对应的节点和所有父节点直到<argument>
。 无需保留父节点的所有属性和值,因为您不会更改它们。 - 更改组件的
.js
文件、模板或任何其他属性的路径。
例子:
Magento_Shipping 模块将一个组件作为指向 Shipping Policy 信息的链接添加到 Shipping 步骤:
<Magento_Shipping_module_dir>/view/frontend/layout/checkout_index_index.xml
如下所示:
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <正文> <referenceBlock name="checkout.root"> <参数> <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> </项目> </项目> </项目> </项目> </项目> </项目> </项目> </项目> </项目> </项目> </项目> </项目> </参数> </参数> </参考块> </正文> </页面>
第 2 步:将新组件添加到结帐页面布局
任何 UI 组件都添加到checkout_index_index.xml
中,类似于添加结帐步骤组件的方式。
确保您声明了一个组件,以便父组件正确呈现它。 如果父组件是通用 UI 组件(由uiComponent
别名引用),则其子组件将无条件渲染。 但是如果父组件是通用 UI 组件的扩展,那么子渲染可能会受到某种限制。 例如,组件只能渲染来自某个displayArea
的子组件。
第 3 步:禁用组件
要禁用checkout_index_index.xml
中的组件,请使用以下说明:
<item name="%the_component_to_be_disabled%" xsi:type="array"> <item name="config" xsi:type="array"> <item name="componentDisabled" xsi:type="boolean">true</item> </项目> </项目>
第 4 步:删除组件
要从布局渲染中删除组件,您需要为\Magento\Checkout\Block\Checkout\LayoutProcessor::process
方法创建一个插件。 在您的插件中,实现在运行时删除相应布局节点的 around 方法。
以下示例是使用 around 方法移除组件的示例:
unset($jsLayout['components']['checkout']['children']['steps'][%path_to_target_node%]); //%path_to_target_node%是checkout_index_index.xml中组件节点的路径 返回 $jsLayout;
(如果您想在代码中使用此示例,请将%path_to_target_node%
占位符替换为实际值。)
*禁用与删除组件:如果禁用组件,它会被加载但不会被渲染。 如果您删除一个组件,它不会被加载。
相关文章:
如何在 Magento 结账时添加折扣码
如何向 Magento 2 Checkout 添加自定义付款