Trước hết, chúng ta cần hiểu cách thức Thông điệp quà tặng Magento hoạt động trên Trang giỏ hàng.
vendor/magento/module-gift-message/view/frontend/templates/cart/gift_options.phtml
Tập tin này là ánh sáng của chúng tôi. Chúng tôi sẽ tiết kiệm rất nhiều thời gian nếu chúng tôi hiểu logic của nó.
window.giftOptionsConfig
: biến toàn cục này được sử dụng cho cấu hình. Chúng ta nên tạo lại nó khi thanh toán.
Hãy bắt đầu thực hiện logic tùy chỉnh của chúng tôi. Tạo một mô-đun mới, thêm logic sau:
ứng dụng / mã / Nhà cung cấp / CheckoutDemo / view / frontend / layout / checkout_index_index.xml
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="content">
<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="config" xsi:type="array">
<item name="template" xsi:type="string">Vendor_CheckoutDemo/shipping</item>
</item>
<item name="children" xsi:type="array">
<!--Gift Options Cart-->
<item name="giftOptionsCart" xsi:type="array">
<item name="displayArea" xsi:type="string">gift_options</item>
<item name="component" xsi:type="string">Magento_GiftMessage/js/view/gift-message</item>
<item name="config" xsi:type="array">
<item name="template" xsi:type="string">Magento_GiftMessage/gift-message</item>
<item name="formTemplate" xsi:type="string">Magento_GiftMessage/gift-message-form</item>
</item>
</item>
<!--End Gift Option-->
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</item>
</argument>
</arguments>
</referenceBlock>
<block class="Magento\Framework\View\Element\Template" name="gift.messages.data" template="Vendor_CheckoutDemo::gift_options.phtml"/>
</referenceBlock>
</body>
</page>
Có 3 lưu ý:
Bước -Shipping sẽ sử dụng mẫu html vận chuyển tùy chỉnh của chúng tôi. Thêm khu vực tùy chỉnh của chúng tôi dễ dàng hơn.
<item name="shippingAddress" xsi:type="array">
<item name="config" xsi:type="array">
<item name="template" xsi:type="string">Vendor_CheckoutDemo/shipping</item>
</item>
Khu vực quà tặng của chúng tôi: Tôi đã sao chép nội dung từ vendor/magento/module-gift-message/view/frontend/layout/checkout_cart_index.xml
.
<!--Gift Options Cart-->
<item name="giftOptionsCart" xsi:type="array">
<item name="displayArea" xsi:type="string">gift_options</item>
<item name="component" xsi:type="string">Magento_GiftMessage/js/view/gift-message</item>
<item name="config" xsi:type="array">
<item name="template" xsi:type="string">Magento_GiftMessage/gift-message</item>
<item name="formTemplate" xsi:type="string">Magento_GiftMessage/gift-message-form</item>
</item>
</item>
<!--End Gift Option-->
-Cấu hình quà tặng
<block class="Magento\Framework\View\Element\Template" name="gift.messages.data" template="Vendor_CheckoutDemo::gift_options.phtml"/>
Tạo ứng dụng / mã / Nhà cung cấp / CheckoutDemo / xem / frontend / samples / gift_options.phtml
<script>
window.giftOptionsConfig = window.checkoutConfig.giftMessageConfig;
</script>
Chúng tôi sử dụng giftOptionsConfig
biến toàn cục vì logic thông điệp quà tặng js sẽ sử dụng nó.
ứng dụng / mã / Nhà cung cấp / CheckoutDemo / etc / frontend / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Checkout\Model\CompositeConfigProvider">
<arguments>
<argument name="configProviders" xsi:type="array">
<item name="gift_message_checkout_config_provider" xsi:type="object">Vendor\CheckoutDemo\Model\GiftMessageConfigProvider\Proxy</item>
</argument>
</arguments>
</type>
</config>
ứng dụng / mã / Nhà cung cấp / CheckoutDemo / Model / GiftMessageConfigProvider.php
<?php
namespace Vendor\CheckoutDemo\Model;
class GiftMessageConfigProvider extends \Magento\GiftMessage\Model\GiftMessageConfigProvider
{
public function getConfig()
{
$config = parent::getConfig();
return ['giftMessageConfig' => $config];
}
}
Tạo html vận chuyển, sao chép nội dung từ vendor/magento/module-checkout/view/frontend/web/template/shipping.html
tùy chỉnh của chúng tôi app/code/Vendor/CheckoutDemo/view/frontend/web/template/shipping.html
. Và, thêm vùng tin nhắn quà tặng tùy chỉnh của chúng tôi:
ứng dụng / mã / Nhà cung cấp / CheckoutDemo / xem / frontend / web / template / Shipping.html
......
<div class="step-title" translate="'Gift Options'" data-role="title" />
<each args="getRegion('gift_options')" render="" />
......
Kết quả: