在magento 2

时间:2016-08-24 12:03:22

标签: checkout magento2

想要在结帐页面添加输入表单以更新运费。到目前为止,我做了以下修改:

1)创建/view/frontend/web/js/custom-checkout-form.js文件并添加以下代码:

    define(
    [
        'ko',
        'uiComponent',
        'underscore',
        'Magento_Checkout/js/model/step-navigator'
    ],
    function (
        ko,
        Component,
        _,
        stepNavigator
    ) {
        'use strict';
        /**
        *
        * mystep - is the name of the component's .html template, 
        * your_module_dir - is the name of the your module directory.
        * 
        */
        return Component.extend({
            defaults: {
                template: 'your_module_dir/mystep'
            },

            //add here your logic to display step,
            isVisible: ko.observable(true),

            /**
            *
            * @returns {*}
            */
            initialize: function () {
                this._super();
                // register your step
                stepNavigator.registerStep(
                    //step code will be used as step content id in the component template
                    'step_code',
                    //step alias
                    null,
                    //step title value
                    'Step Title',
                    //observable property with logic when display step or hide step
                    this.isVisible,

                    _.bind(this.navigate, this),

                    /**
                    * sort order value
                    * 'sort order value' < 10: step displays before shipping step;
                    * 10 < 'sort order value' < 20 : step displays between shipping and payment step
                    * 'sort order value' > 20 : step displays after payment step
                    */
                    15
                );

                return this;
            },

            /**
            * The navigate() method is responsible for navigation between checkout step
            * during checkout. You can add custom logic, for example some conditions
            * for switching to your custom step 
            */
            navigate: function () {

            },

            /**
            * @returns void
            */
            navigateToNextStep: function () {
                stepNavigator.next();
            }
        });
    }
);

2)创建了HTML模板/view/frontend/web/template/custom-checkout-form.html

<div>
    <form id="custom-checkout-form" class="form" data-bind="attr: {'data-hasrequired': $t('* Required Fields')}">
        <fieldset class="fieldset">
            <legend data-bind="i18n: 'Custom Checkout Form'"></legend>
            <!-- ko foreach: getRegion('custom-checkout-form-fields') -->
            <!-- ko template: getTemplate() --><!-- /ko -->
            <!--/ko-->
        </fieldset>
        <button type="reset">
            <span data-bind="i18n: 'Reset'"></span>
        </button>
        <button type="button" data-bind="click: onSubmit" class="action">
            <span data-bind="i18n: 'Submit'"></span>
        </button>
    </form>
</div>

3)删除pub / static / frontend和var / view_preprocessing目录中的所有文件。重新加载页面。

4)在/ 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="before-form" xsi:type="array">
                                                                <item name="children" xsi:type="array">
                                                                    <!-- Your form declaration here --> 
                                                                    <item name="custom-checkout-form-container" xsi:type="array">
                                                                    <item name="component" xsi:type="string">%your_module_dir%/js/view/custom-checkout-form</item>
                                                                    <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                    <item name="config" xsi:type="array">
                                                                    <item name="template" xsi:type="string">%your_module_dir%/custom-checkout-form</item>
                                                                   </item>
                                                                   <item name="children" xsi:type="array">
                                                                   <item name="custom-checkout-form-fieldset" xsi:type="array">
                                                                   <!-- uiComponent is used as a wrapper for form fields (its template will render all children as a list) -->
                                                                   <item name="component" xsi:type="string">uiComponent</item>
                                                                  <!-- the following display area is used in template (see below) -->
                                                                  <item name="displayArea" xsi:type="string">custom-checkout-form-fields</item>
                                                                  <item name="children" xsi:type="array">
                                                                  <item name="text_field" xsi:type="array">
                                                                  <item name="component" xsi:type="string">Magento_Ui/js/form/element/abstract</item>
                                                                  <item name="config" xsi:type="array">
                                                                  <!-- customScope is used to group elements within a single form (e.g. they can be validated separately) -->
                                                                  <item name="customScope" xsi:type="string">customCheckoutForm</item>
                                                                  <item name="template" xsi:type="string">ui/form/field</item>
                                                                  <item name="elementTmpl" xsi:type="string">ui/form/element/input</item>
                                                                 </item>
                                                                 <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                 <item name="dataScope" xsi:type="string">customCheckoutForm.text_field</item>
                                                                 <item name="label" xsi:type="string">Text Field</item>
                                                                 <item name="sortOrder" xsi:type="string">1</item>
                                                                 <item name="validation" xsi:type="array">
                                                                 <item name="required-entry" xsi:type="string">true</item>
                                                                 </item>
                                                                 </item>
                                                                 <item name="checkbox_field" xsi:type="array">
                                                                 <item name="component" xsi:type="string">Magento_Ui/js/form/element/boolean</item>
                                                                <item name="config" xsi:type="array">
                                                                 <!--customScope is used to group elements within a single form (e.g. they can be validated separately)-->
                                                                <item name="customScope" xsi:type="string">customCheckoutForm</item>
                                                                <item name="template" xsi:type="string">ui/form/field</item>
                                                                <item name="elementTmpl" xsi:type="string">ui/form/element/checkbox</item>
                                                                </item>
                                                                <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                <item name="dataScope" xsi:type="string">customCheckoutForm.checkbox_field</item>
                                                                <item name="label" xsi:type="string">Checkbox Field</item>
                                                                <item name="sortOrder" xsi:type="string">3</item>
                                                                </item>
                                                                <item name="select_field" xsi:type="array">
                                                                <item name="component" xsi:type="string">Magento_Ui/js/form/element/select</item>
                                                                <item name="config" xsi:type="array">
                                                               <!--customScope is used to group elements within a single form (e.g. they can be validated separately)-->
                                                                <item name="customScope" xsi:type="string">customCheckoutForm</item>
                                                                <item name="template" xsi:type="string">ui/form/field</item>
                                                                <item name="elementTmpl" xsi:type="string">ui/form/element/select</item>
                                                                </item>
                                                                <item name="options" xsi:type="array">
                                                                <item name="0" xsi:type="array">
                                                                <item name="label" xsi:type="string">Please select value</item>
                                                                <item name="value" xsi:type="string"></item>
                                                                </item>
                                                                <item name="1" xsi:type="array">
                                                                <item name="label" xsi:type="string">Value 1</item>
                                                                <item name="value" xsi:type="string">value_1</item>
                                                                </item>
                                                                <item name="2" xsi:type="array">
                                                                <item name="label" xsi:type="string">Value 2</item>
                                                                <item name="value" xsi:type="string">value_2</item>
                                                                </item>
                                                                </item>
                                                                <!-- value element allows to specify default value of the form field -->
                                                                <item name="value" xsi:type="string">value_2</item>
                                                                <item name="provider" xsi:type="string">checkoutProvider</item>
                                                                <item name="dataScope" xsi:type="string">customCheckoutForm.select_field</item>
                                                                <item name="label" xsi:type="string">Select Field</item>
                                                                <item name="sortOrder" xsi:type="string">2</item>
                                                                </item>
                                                                <item name="date_field" xsi:type="array">
                                                                <item name="component" xsi:type="string">Magento_Ui/js/form/element/date</item>
                                                                <item name="config" xsi:type="array">
                                                               <!--customScope is used to group elements within a single form (e.g. they can be validated separately)-->
                                                               <item name="customScope" xsi:type="string">customCheckoutForm</item>
                                                               <item name="template" xsi:type="string">ui/form/field</item>
                                                               <item name="elementTmpl" xsi:type="string">ui/form/element/date</item>
                                                               </item>
                                                               <item name="provider" xsi:type="string">checkoutProvider</item>
                                                               <item name="dataScope" xsi:type="string">customCheckoutForm.date_field</item>
                                                               <item name="label" xsi:type="string">Date Field</item>
                                                               <item name="validation" xsi:type="array">
                                                               <item name="required-entry" xsi:type="string">true</item>
                                                               </item>
                                                                </item>
                                                                </item>
                                                                </item>
                                                                </item>
                                                                </item>
                                                                </item>
                                                            </item>
                                                        </item>
                                                    </item>
                                                </item>
                                            </item>
                                        </item>
                                    </item>
                                </item>
                            </item>
                        </item>
                    </argument>
                </arguments>
            </referenceBlock>
        </body>
    </page>

但它不适合我。提到了magento的文档http://devdocs.magento.com/guides/v2.0/howdoi/checkout/checkout_form.html。如果我在命名文件时做错了,请纠正我。如果有人可以提供帮助我真的很感激!

0 个答案:

没有答案