如何在 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 添加自定義付款
