як додати спеціальний блок при способах доставки нижче в одній сторінці замовлення?


11

Я хочу додати спеціальний блок нижче методів доставки, і цей спеціальний блок повинен знаходитися всередині форми способу доставки. Я думаю, що наступний рядок коду є корисним для додавання цього файлу, але не знаю, як діяти далі.

<div id="onepage-checkout-shipping-method-additional-load">
                    <!-- ko foreach: getRegion('shippingAdditional') -->
                    <!-- ko template: getTemplate() --><!-- /ko -->
                    <!-- /ko -->
                </div>

Відповіді:


43

1. Оголосіть залежність каси модуля

app / code / NameSpace / ModuleName / etc / module.xml

<?xml version="1.0"?>

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="NameSpace_ModuleName" setup_version="0.0.1" active="true">
        <sequence>
            <module name="Magento_Checkout"/>
        </sequence>
    </module>
</config>

2. Перезапишіть макет оформлення замовлення

app / code / NameSpace / ModuleName / 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="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="shippingAdditional" xsi:type="array">
                                                            <item name="component" xsi:type="string">uiComponent</item>
                                                            <item name="displayArea" xsi:type="string">shippingAdditional</item>
                                                            <item name="children" xsi:type="array">
                                                                <item name="additional_block" xsi:type="array">
                                                                    <item name="component" xsi:type="string">NameSpace_ModuleName/js/view/checkout/shipping/additional-block</item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </item>
                </argument>
            </arguments>
        </referenceBlock>
    </body>
</page>

3. Створіть компонент інтерфейсу JavaScript

Оформлення замовлення Magento 2 здійснюється в JavaScript (за допомогою нокауту). Тому вам потрібно створити спеціальний компенсатор JS. Це створить зв’язок між компонентом інтерфейсу оформлення замовлення та вашим спеціальним HTML-шаблоном.

app / code / NameSpace / ModuleName / view / frontend / web / js / view / checkout / доставка / shipping-block.js

визначити ([
    'uiComponent'

], функція (компонент) {
    'використовувати суворо';

    повернути Component.extend ({
        за замовчуванням: {
            шаблон: 'NameSpace_ModuleName / замовлення / доставка / додатковий блок'
        }
    });
});

4. Створіть HTML-шаблон

Потім створіть HTML-шаблон, який буде відображений у касі.

app / code / NameSpace / ModuleName / view / frontend / web / template / checkout / shipping / Additional-block.html

<div class="checkout-block" id="block-custom">
    <p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
    <p>Cum sociis natoque penatibus et magnis dis parturient montes.</p>
</div>

5. Очистити кеш

Нарешті запустіть наступні команди:

php bin/magento cache:clean
php bin/magento setup:upgrade
chmod -R 777 var/*

Завантажте повний приклад демо-модуля звідси


1
насправді ви дивовижні. Немає кінця для magento community.its evergreen
Sivakumar K

Ви отримали ці помилки? Broken reference: No element found with ID 'checkout.header.wrapper'. [] [] Class SR\AdditionalShippingBlock\Model\CustomBlockConfigProvider does not exist [] [] [2016-04-13 10:15:06] main.CRITICAL: Invalid block type: Magento\Checkout\Block\Onepage [] []
Тіаго Фігейро

Порада для інших нуб: модуль повинен зайти app/code/SR/AdditionalShippingBlock, а не app/code/Magento/AdditionalShippingBlock.
Тіаго Фігейро

@sohel rana, я хотів би динамічне випадання замість текстового поля на тому самому місці, дайте мені поради щодо цього. Дякую.
Ракеш Єсадія

Це реально? : S wtf
OZZIE

7

У представленому файлі "checkout_index_index.xml" є одна невелика помилка. Це повинно бути

<?xml version="1.0"?>

ні

<xml version="1.0"?>

Міс перша чарка '?'


Це могло бути похвалою у відповідь Сохеля. У будь-якому випадку файл є правильним у його репортажі github.com/sohelrana09/…
Тіаго Фігейро

Так, звісно. Але я повинен мати 50 репутацій для коментарів; (
Марцін Корзистка
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.